Can Sqlplus read the contents of a file into a variable?

不羁岁月 提交于 2019-12-01 00:23:57
diziaq

Yes, there's a tricky way to do it. Put something into props.txt and run the script:

DECLARE
  -- the @@ expression must be in separate line as follows
  file_contents VARCHAR2(32767) := '
@@props.txt
';
BEGIN 
  dbms_output.put_line('===');
  dbms_output.put_line(file_contents);
  dbms_output.put_line('===');
END;
/

Note that the file props.txt can not contain an "@" or you'll get nested SQL*PLUS calls

No. Load would only store the file contents in Sql*Plus's own sql buffer. You can then run, edit and list the buffer.

A substitution variable is not the right place to load a file into. Use a bind variable of type clob for that and load the file contents using utl_file. But of course the file has to be located on the server in this case.

edit: if the data has to be located on the client, your option would be to load the clob using a pl/sql block and several calls to dbms_lob.writeappend

Your file would have to look like this (cannot test it ATM):

var l clob;

begin
  dbms_lob.createtemporary(l);
  dbms_lob.writeappend(l, 'abcdef...');
  dbms_lob.writeappend(l, 'ijkl...');
end;
/
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!