在 PL/SQL 中将数据从文本文件复制到 CLOB

Posted

技术标签:

【中文标题】在 PL/SQL 中将数据从文本文件复制到 CLOB【英文标题】:Copying data from a text file to a CLOB in PL/SQL 【发布时间】:2015-05-07 09:44:14 【问题描述】:

我使用以下代码将文本从文件复制到 CLOB。但是,它在执行 writeappend 的位置给了我一个 PL/SQL 数字或值错误。

    declare
  l_fhandle utl_file.file_type;
  l_clob    CLOB;
  l_buffer  VARCHAR2(4096);
BEGIN
  l_fhandle := utl_file.fopen('/data',
                              'FILE.TXT',
                              'R');
  dbms_lob.createtemporary(l_clob, TRUE, DBMS_LOB.CALL);
  LOOP
    BEGIN
      utl_file.get_line(L_FHANDLE, l_buffer);
      dbms_output.put_line(l_buffer);
     dbms_lob.writeappend(l_clob, length(l_buffer), l_buffer);

    EXCEPTION
      WHEN no_data_found THEN
        dbms_output.put_line('Inside No data found');
        INSERT INTO TAB_CLOB_FILE
          (FILENAME, BODYCONT)
        VALUES
          ('FILE', l_clob);
          dbms_output.put_line('Inserted data into table');
        EXIT;

    END;
  END LOOP;
END;

请帮我找出问题所在

【问题讨论】:

【参考方案1】:

您的问题很可能在这里:

utl_file.fopen('/data', 'FILE.TXT','R');

第一个参数是 oracle 目录 OBJECT 的名称,而不是目录的物理路径。来自 Oracle 文档,“文件的目录位置。此字符串是目录对象名称,区分大小写。默认为大写。必须为此目录对象授予读取权限,UTL_FILE 用户才能运行 FOPEN。”不过,不正确的调用应该会引发异常。

你需要先创建一个目录对象如:

create directory MY_DIR as '/data';  

然后将 fopen 调用改为:utl_file.fopen('MY_DIR', 'FILE.TXT','R');

您可以阅读目录对象here。

【讨论】:

嗨,但正如***.com/questions/2751113/… 中给出的那样,我猜这两种打开文件的方法是允许的,通过提供目录名和物理路径打开,并且在 fopen 中没有发生错误。它发生在 writeappend

以上是关于在 PL/SQL 中将数据从文本文件复制到 CLOB的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中将游标数据提取到数组中

pl sql developer怎么执行sql

pl sql developer怎么执行sql

在Java中将文件从一个目录复制到另一个目录

如何在java中将文本添加到文本文件中? [复制]

Excel 通过pl/sql导入到数据库 文本导入器 odbc导入器