PL / SQL TEXT_IO包

时间:2011-04-18 20:44:35

标签: sql oracle plsql sqlplus

我正在尝试从PL / SQL脚本写入本地文件。为了做到这一点,我试图在PL / SQL中使用TEXT_IO包。

DECLARE
file_out text_io.file_type;
len number;
blob_file blob;
my_var RAW(50);
bstart NUMBER := 1;
bytelen NUMBER := 50;

BEGIN

SELECT xxx
INTO blob_file
FROM yyy
WHERE zzz

dbms_lob.read(blob_file, bytelen, bstart, my_var);    
file_out := text_io.fopen('local_file_path', 'w');
text_io.put_raw(file_out, my_var);
text_io.fflush(file_out);
text_io.fclose(file_out);

END;
/

quit

但是,当我运行此脚本时,我收到错误

PLS-00201: identifier 'TEXT_IO.FILE_TYPE' must be declared

有谁知道我如何修复此错误,以及如何在我尝试将blob的内容写入文件?

谢谢,
KTM

3 个答案:

答案 0 :(得分:6)

TEXT_IO仅存在于Oracle Forms中(在旧客户端/服务器时段内)具有客户端PL / SQL解释器。如果您使用SQL * Plus执行PL / SQL,就像您在此处所看到的那样,TEXT_IO包将无法使用,您将无法写入客户端计算机上的文件(除非奇怪的设置,服务器挂载客户端正在暴露的驱动器,然后继续写入该挂载。)

现在,您通常可以使用SQL * Plus使用SPOOL命令直接写入本地文件。不幸的是,在一般情况下,你可能不太可能为BLOB做这件事。

答案 1 :(得分:1)

一般方法是:在服务器上写一个文件并下载它。或者事件更好,不要写下来,只是流式传输。相当复杂,是的。

答案 2 :(得分:0)

如果要在服务器上创建文件,UTL_FILE是一个不错的选择。 该包可以在数据库中指定的任何DIRECTORY中写入文件。使用CREATE DIRECTORY在Oracle中创建DIRECTORY,并且可以链接到DBMS(服务器端)可访问的任何可写目录。