2012-12-28 33 views
0

我想创建一个程序,从雇员记录中获得薪水超过输入数量的记录。 然后获得输出到文本文件。 我不明白我在做错什么。请帮助我。提前致谢。UTL_FILE WITH%ROWTYPE ..错误

我有员工表结构如下。 Desc TABLE雇员; 名称为空?键入


EMPLOYEE_ID NOT NULL NUMBER(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)
SALARY NUMBER(8,2)
COMM ISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(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):警告:编译但编译错误

回答

0

线给你的错误是21,这似乎是:

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

我建议,这个问题是,要么正在您的批量SELECT语句返回行,或者他们AREN” t以您期望的格式显示。

尝试把在这样的:

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

如在循环的第一行。

或者,也许做大量的记录数选择前的循环结果:

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