【问题标题】:oracle -PL/SQL Resolving variable names in a filename declarationoracle -PL/SQL 解析文件名声明中的变量名
【发布时间】:2018-04-04 13:55:34
【问题描述】:

我正在尝试在本地计算机上读取一系列模板文件,并将数据放入 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;

【问题讨论】:

    标签: variables plsql oracle11g sqlplus


    【解决方案1】:

    您只需要像在第一个示例中那样在一行上单独使用双符号。

    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>
    

    【讨论】:

    • 谢谢,但是 && 不起作用。值 '&&MyFileName' 被插入到表中,而不是由 MyFileName 变量定义的文件的内容。如果我删除“set define off”,我会提示我输入 MyFileName 的值。这样做的目的是让文件名成为一个变量,这样我就可以读取目录的内容并遍历文件列表。我编辑了第二个代码块以符合您的建议。
    • 我的回答涉及双符号。当我的意思是“at-sign”时,我输入了“&”。您是否尝试提示输入文件名?在此期间,我会更正我的错字。
    • 我不想提示输入文件名。我想为文件名(MyFileName)使用一个变量,然后将该文件的内容读入另一个变量(File_Contents)。您上面的示例对文件名进行了硬编码,效果很好。但是当它是@@MyFileNameVariable 时,我无法让它工作。它要么不读取它,要么用文件名而不是文件的内容填充 File_Contents 变量。非常感谢您对此进行调查。
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多