1
 DECLARE
    data_line   VARCHAR2(200); -- Data line read from input file
    data_file   UTL_FILE.FILE_TYPE; -- Data file handle
    my_dir      VARCHAR2(250); -- Directory containing the data file
    my_filename VARCHAR2(50);


    BEGIN
      my_dir := 'c:\temp';
      my_filename := 'Lab4AData.dat';
      my_file := UTL_FILE.FOPEN(my_dir, my_filename, 'r'); 


    LOOP;
          UTL_FILE.GET_LINE(data_file, data_line);

      EXCEPTION
        WHEN no_data_found THEN
          DBMS_OUTPUT.PUT_LINE('Finished');
          exit;
          END LOOP;
      END;


    /

问题是我什至无法启动这个匿名代码块。首先,我只是试图打开我的数据文件并读取它,然后从那里构建。但我什至无法打开文件。

SQL Developer 错误报告开始于

从命令的第 5 行开始出错:
宣布

然后重复代码块并添加:

ORA-06550:第 12 行,第 8 列:
PLS-00103:遇到符号“;” 当期待以下之一时:

   (开始 case 声明退出 goto if loop mod null pragma
   使用 <an identifier> 时提高返回选择更新
   <一个双引号分隔标识符> <一个绑定变量> <<
   继续关闭当前删除获取锁插入打开回滚
   保存点设置 sql 执行提交 forall 合并管道清除
符号“exit”被替换为“;” 接着说。
ORA-06550:第 15 行,第 3 列:
PLS-00103:在预期以下情况之一时遇到符号“例外”:

   ( begin case 声明 end exit for goto if loop mod null
   pragma raise return select update while with <an identifier>
   <一个双引号分隔的-i
06550. 00000 - “第 %s 行,第 %s 列:\n%s”
*原因:通常是 PL/SQL 编译错误。
*行动:
4

1 回答 1

1

尝试以下操作:

DECLARE
  data_line   VARCHAR2(200); -- Data line read from input file
  data_file   UTL_FILE.FILE_TYPE; -- Data file handle
  my_dir      VARCHAR2(250); -- Directory containing the data file
  my_filename VARCHAR2(50);
BEGIN
  my_dir := 'c:\temp';
  my_filename := 'Lab4AData.dat';
  data_file := UTL_FILE.FOPEN(my_dir, my_filename, 'r'); 

  LOOP
    UTL_FILE.GET_LINE(data_file, data_line);

    -- add code to do something with data_line here
  END LOOP;
EXCEPTION
  WHEN no_data_found THEN
    DBMS_OUTPUT.PUT_LINE('Finished');
    UTL_FILE.FCLOSE(data_file);
END;

@ShannonSeverance 关于使用带有 UTL_FILE.FOPEN 的目录对象的评论是适当的,除非您的 DBA 没有接受它们的使用并坚持坚持使用“久经考验的”INIT.ORA 参数 UTL_FILE_DIR。不要问我怎么知道... :-)

分享和享受。

于 2013-05-27T23:58:17.910 回答