2012-12-28 6 views
0

필자의 급여보다 많은 직원 레코드에서 행을 가져 오는 프로 시저를 만들고 싶습니다. 그런 다음 해당 출력을 텍스트 파일로 가져옵니다. 내가 잘못하고있는 부분을 이해하지 못합니다. 제발 도와주세요. 미리 감사드립니다.UTL_FILE WITH % ROWTYPE .. ERROR

나는 아래 구조화 된 직원 테이블을 가지고 있습니다. Desc 테이블 직원; 이름 Null?


EMPLOYEE_ID NOT NULL NUMBER (6)
FIRST_NAME VARCHAR2 (20)
LAST_NAME NOT NULL VARCHAR2 (25)
이메일 NOT NULL VARCHAR2 (25)
PHONE_NUMBER VARCHAR2 (20)
HIRE_DATE를 입력 NOT NULL 날짜
JOB_ID NOT NULL VARCHAR2 (10)
SALARY NUMBER (8,2)
COMM ISSION_PCT 번호 (2,2)
MANAGER_ID 번호 (6)
DEPARTMENT_ID 번호 (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) : 경고 : 컴파일되었지만 컴파일 됨 '

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

나는 문제가 두 행이 대량 SELECT 문에서 반환되고 있다는 것을 제안, 또는 그들은 때로 믿을 : 당신에게 오류를 제공 오류

답변

0

줄은 것으로 나타나는, 21 당신이 기대하는 형식으로. 처럼 뭔가에 넣어

시도 : 루프의 첫 번째 행으로

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

.

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

은 또는, 어쩌면 대부분의 레코드 개수는 루프 전에 결과를 선택 할