oracle -PL / SQL在文件名声明中解析变量名

时间:2017-10-23 21:57:38

标签: variables plsql oracle11g sqlplus

我试图读取本地计算机上的一系列模板文件,并将数据放入oracle数据库中的clob列。当文件名是硬连线时,我有一些非常有用的东西:

Declare
    v_Template clob:= '
     @@MyFolder\MyFilename.txt
     '; 

    Begin
    --Insert the contents of the file into a Clob column in the database
    end;
    /

此变量值稍后会插入到表的CLOB列中。

这里描述。 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjGjI7i24fXAhXhx1QKHQ14AcoQFggmMAA&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F19721274%2Fcan-sqlplus-read-the-contents-of-a-file-into-a-variable&usg=AOvVaw3qxvCpXHc9D2tof3Gisvlz

但是当我尝试为文件名设置变量时,v_template的值将填充变量的名称,而不是文件的内容。有没有办法让这个正确解决?例如,

DECLARE
-- the @@ expression must be in separate line as follows

Myfilename varchar(50):='@@MyPath\Template_File.txt';

file_contents VARCHAR2(32767):='
 &&MyFileName
 ';
Begin
insert into MyTAble (template_definition)
values(file_contents);
commit;

end;

1 个答案:

答案 0 :(得分:0)

你需要像在第一个例子中那样单独在一条线上进行双重符号。

set serveroutput on

Declare
file_contents VARCHAR2(32767) := '
@@c:\temp\efs.txt
';   
BEGIN 
  dbms_output.put_line('===');
  dbms_output.put_line(file_contents);
  dbms_output.put_line('===');
END;
/
===

this is
a test

===

PL/SQL procedure successfully completed.

SQL>