programing

PL/SQL Developer에서 파이프라인 함수를 디버그하는 방법은 무엇입니까?

linuxpc 2023. 7. 30. 17:27
반응형

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

반응형