UTL_FILE WITH%ROWTYPE ..错误

时间:2012-12-28 04:06:15

标签: utl-file rowtype

我想创建一个程序,从雇员记录中获取其工资多于输入数字的行。 然后将该输出转换为文本文件。 我不明白我做错了什么。请帮帮我。提前谢谢。

我的员工表格如下所示。 Desc TABLE员工;  名字空?输入


EMPLOYEE_ID非空数(6)
 FIRST_NAME VARCHAR2(20)
 LAST_NAME NOT NULL VARCHAR2(25)
 EMAIL NOT NULL VARCHAR2(25)
 PHONE_NUMBER VARCHAR2(20)
 HIRE_DATE NOT NULL DATE
 JOB_ID NOT NULL VARCHAR2(10)
 人数(8,2)
 COMMISSION_PCT NUMBER(2,2)
 MANAGER_ID号码(6)
 DEPARTMENT_ID NUMBER(4)

当我想在脚本下面运行时。

    CREATE OR REPLACE PROCEDURE P_TEST3 ( P_SAL NUMBER) IS

    TYPE EMP_TEMP IS TABLE OF employees%ROWTYPE;
   V_EMP_ROW     EMP_TEMP ;


 V1 utl_file.file_type;

 E1 utl_file.file_type;

    BEGIN


 V1 := utl_file.fopen('ABC','VALID.txt','W');
E1 := utl_file.fopen('ABC','ERROR.txt','W');

SELECT *  BULK COLLECT INTO V_EMP_ROW   FROM Employees  WHERE salary > p_sal   ;

FOR i IN  V_EMP_ROW.FIRST .. V_EMP_ROW.LAST 
    LOOP
    UTL_FILE.PUT_LINE (V1, V_EMP_ROW(I).EMPLOYEE_ID ||',' || V_EMP_ROW(I).FIRST_NAME ||','|| V_EMP_ROW(I).SALARY );
    END LOOP;

  dbms_output.put_line ('Total row inserted '||sql%rowcount || '.  Please see valid.txt file ' );


EXCEPTION

WHEN OTHERS THEN
raise_application_error( -20002,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

utl_file.put_line (E1,SQLCODE || '---' || SQLERRM);

DBMS_OUTPUT.PUT_LINE ('PLEASE SEE Error.txt FILE');

utl_file.fclose(v1);
utl_file.fclose(E1);

 END P_TEST3;

/

编译器给出了以下错误。 [警告] ORA-24344:编译错误成功 21/42 PLS-00302:必须声明组件'EMPLOYEE_ID' 21/9 PL / SQL:语句被忽略  (1:0):警告:编译但编译错误

1 个答案:

答案 0 :(得分:0)

给出错误的行是21,似乎是:

UTL_FILE.PUT_LINE (V1, V_EMP_ROW(I).EMPLOYEE_ID ||',' || V_EMP_ROW(I).FIRST_NAME ||','|| V_EMP_ROW(I).SALARY );

我建议问题是在BULK SELECT语句中没有返回任何行,或者它们不是您期望的格式。

尝试输入类似的内容:

dbms_output.put_line('Record is: '|| V_EMPROW(i));

作为循环中的第一行。

或者,可能在循环之前对批量选择结果进行记录计数:

dbms_output.put_line('Record count is: '|| V_EMPROW.COUNT);
相关问题