나는 1968 년 이후 모든 직원을 돌려 줄 사용자 정의 함수를 생성해야한다고 지정했다. 내 코드는 다음과 같다 :Oracle PL/SQL에서 중첩 테이블을 어떻게 표시합니까?
처음에는 emp_dobs라는 새 객체를 만들어 직원 '이름, 성, 생년월일, 원래 직원 테이블과 같은 데이터 유형을 사용 :
다음CREATE OR REPLACE TYPE emp_dobs AS OBJECT (
emp_fname VARCHAR2(20),
emp_lname VARCHAR2(20),
emp_dob DATE
);
/
내가 emp_dobs의 테이블로 emp_dobs_nested 만들 :
CREATE OR REPLACE TYPE emp_dobs_nested AS TABLE OF emp_dobs;
/
마지막으로, 내가 만들 함수 th emp_dobs_nested 테이블을 반환 해야하는에서 :
CREATE OR REPLACE FUNCTION get_emp_dobs RETURN emp_dobs_nested
AS
dobs emp_dobs_nested;
BEGIN
SELECT emp_dobs(firstname, lastname, birthdate) BULK COLLECT INTO dobs
FROM employee
WHERE birthdate < TO_DATE('01-JAN-1968', 'DD-MON-YYYY');
RETURN dobs;
END;
/
이 오라클 SQL 개발자가 표시된 새 탭이 표시됩니다 다만, emp_dob_nested의 컴파일 이상한 특질이다 "출력 변수 - 로그,"만 EMP_FNAME 및 EMP_LNAME을 보여줍니다. 그럼에도 불구하고 모든 것이 컴파일됩니다.
는 지금은 기능을 테스트하고 작동하는지 증명하기 위해 그 결과를 표시 할,하지만 난 때이 :
Error report -
ORA-06550: line 5, column 5:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 5:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
내가 놓친 게 무엇 :
DECLARE
dobs emp_dobs_nested;
BEGIN
dobs := get_emp_dobs;
DBMS_OUTPUT.PUT_LINE(dobs);
END;
/
나는이 오류 이리? 감사.
시도 - 클래스 할당을 의미를, 그/그녀는 PL/SQL 클래스를 사용하고 있음을 의미합니다. 그는 PL/SQL 기술을 연습해야합니다. – mathguy
아, 알았어, 내 업데이트 된 답변을 시도해 볼 수도 있습니다. 위의 승인 된 답변과 유사하게 보일 수 있습니다. – eifla001