반응형
PL/SQL Developer에서 파이프라인 함수를 디버그하는 방법은 무엇입니까?
Oracle 데이터베이스에 다음과 같은 FN_GET_USERINFO_ROWS라는 파이프라인 함수가 포함된 PL/SQL 패키지가 있습니다.
CREATE OR REPLACE PACKAGE PKG_USERINFO AS
TYPE TY_USERINFO_RECORD IS RECORD( U_ID VARCHAR2(50),
U_NAME VARCHAR2(50),
DOB DATE);
TYPE TY_USERINFO_TABLE IS TABLE OF TY_USERINFO_RECORD;
FUNCTION FN_GET_USERINFO_ROWS(P_USER_ID IN NUMBER)
RETURN TY_USERINFO_TABLE PIPELINED;
END PKG_USERINFO;
그리고 PL/SQL Developer(파일->새로 만들기->테스트 창)에서 파이프라인 FN_GET_USERINFO_ROWS를 테스트하기 위해 다음 테스트 스크립트를 실행하고 있습니다.
declare
result PKG_USERINFO.TY_USERINFO_TABLE;
begin
-- calling pipelined function
result := PKG_USERINFO.FN_GET_USERINFO_ROWS(P_USER_ID => :P_USER_ID);
end;
그러나 다음과 같은 오류가 표시됩니다.
ORA-06550: 라인 28, 열 12: PLS-00653: 집계/테이블 함수는 PL/SQL 범위에서 허용되지 않습니다.
PL/SQL Developer를 사용하여 파이프라인 함수를 디버그하려면 어떻게 해야 합니까?
한 가지 방법은 다음을 사용하여 블록을 만드는 것입니다.FOR-SELECT-LOOP
그리고 함수에 중단점을 넣거나 가져온 각 행에 대한 내용만 기록합니다(디버깅의 의미에 따라 다름).그래서 당신은 각각을 분리할 수 있습니다.PIPE ROW
실행하고 결과를 확인합니다.
그런 다음 PL/SQL Dev에서 File->Open->TestScript를 선택하고 열린 창에서 블록을 실행합니다.
DECLARE
result pkg_userinfo.ty_userinfo_table;
BEGIN
-- we call pipelined functions like this
FOR rec IN (SELECT *
FROM TABLE (pkg_userinfo.fn_get_userinfo_rows(:P_USER_ID))
-- WHERE rownum < 2
-- uncomment this line and vary amount of fetched rows
)
LOOP
dbms_output.put_line('another step : ' || rec.u_id);
END LOOP;
END;
또한 다음과 같은 경우 변형을 디버그하는 것이 좋습니다.NO_DATA_NEEDED
던져지고 있습니다.작업 추가WHERE
행 수를 제한하는 절입니다.
언급URL : https://stackoverflow.com/questions/35128472/how-to-debug-a-pipelined-function-in-pl-sql-developer
반응형
'programing' 카테고리의 다른 글
선 그림에 인라인 레이블을 배치하는 방법 (0) | 2023.07.30 |
---|---|
Slim PHP 및 GET 매개 변수 (0) | 2023.07.30 |
Angular 2에서 부트스트랩 navbar "active" 클래스를 설정하는 방법은 무엇입니까? (0) | 2023.07.30 |
드롭다운에서 공백 뒤에 데이터 목록이 완전한 이름을 표시하지 않음 (0) | 2023.07.30 |
Android의 파일 경로에서 컨텐츠 uri 가져오기 (0) | 2023.07.30 |