【问题标题】:PL/SQL TEXT_IO packagePL/SQL TEXT_IO 包
【发布时间】:2011-04-18 20:44:34
【问题描述】:

我正在尝试从 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 的内容写入文件中?

谢谢,
公里

【问题讨论】:

    标签: sql oracle plsql sqlplus


    【解决方案1】:

    TEXT_IO 仅存在于具有(在旧客户端/服务器时代)客户端 PL/SQL 解释器的 Oracle Forms 中。如果您使用 SQL*Plus 执行 PL/SQL,正如您在此处所做的那样,TEXT_IO 包将不可用,并且您将无法写入客户端计算机上的文件(除了奇怪的设置服务器挂载您的客户端公开的驱动器,然后继续写入该挂载)。

    现在,您通常可以使用 SQL*Plus 通过 SPOOL 命令直接写入本地文件。不幸的是,在一般情况下,您可能不太可能为 BLOB 执行此操作。

    【讨论】:

    • 我明白了。哈哈,这一切都很复杂……我想我会写一个快速的Java程序来下载BLOB。
    【解决方案2】:

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

    【讨论】:

    • OP 正在尝试写入 本地 文件。使用 UTL_FILE,您无法编写本地文件,除了,如果您在托管数据库服务器的同一台机器上运行存储过程。通常情况并非如此。
    【解决方案3】:

    一般的做法是:在服务器上写一个文件,然后下载。或者事件更好,不要写下来,只是流式传输。很复杂,是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多