필자의 급여보다 많은 직원 레코드에서 행을 가져 오는 프로 시저를 만들고 싶습니다. 그런 다음 해당 출력을 텍스트 파일로 가져옵니다. 내가 잘못하고있는 부분을 이해하지 못합니다. 제발 도와주세요. 미리 감사드립니다.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 문에서 반환되고 있다는 것을 제안, 또는 그들은 때로 믿을 : 당신에게 오류를 제공 오류