Używam Oracle SQL Developer, ale mam problem z wyświetlaniem wyników z pakietu, który zwraca kursor ref. Poniżej znajduje się definicja pakietu:Używanie kursora Ref w Oracle SQL Developer
CREATE OR REPLACE package instance.lswkt_chgoff_recov
as
type rec_type is record
(
source_cd lswk_tpr.gltrans.tpr_source_cd%TYPE,
as_of_dt lswk_tpr.gltrans.tpr_as_of_dt%TYPE,
chrg_off_recov varchar2(5),
process_dt lswk_tpr.gltrans.dtgltran%TYPE,
effect_dt lswk_tpr.gltrans.dtgltran%TYPE,
account_nbr lswk_tpr.contract.lcontid%TYPE,
naics_cd lswk_tpr.udfdata.sdata%TYPE,
prod_type varchar2(20),
off_nbr lswk_tpr.schedule.sctrcdty%TYPE,
borrower_nm lswk_tpr.customer.scustnm%TYPE,
tran_type_cd lswk_tpr.gltrans.sglcd%TYPE,
tran_type_desc lswk_tpr.gltrans.sglcd%TYPE,
tran_amt lswk_tpr.gltrans.ctranamt%TYPE,
note_dt lswk_tpr.schedule.dtbk%TYPE,
accru_cd number,
non_accr_cd lswk_tpr.schedule.dtlstincsus%TYPE,
comm_sb_ind varchar2(4)
);
type cur_type is ref cursor return rec_type;
procedure sp
(
p_as_of_dt in date,
ref_cur in out cur_type
);
end;
/
Domyślam się, że to jest możliwe, a jeśli tak, to co muszę zrobić. Korzystam z Oracle SQL Developer 1.5.5. Dzięki.
Wade
Oto kod użyłem zadzwonić do mojego pakietu (generowane przez TOAD):
DECLARE
P_AS_OF_DT DATE;
REF_CUR instance.LSWKT_CHGOFF_RECOV.CUR_TYPE;
REF_CUR_row REF_CUR%ROWTYPE;
BEGIN
P_AS_OF_DT := '31-AUG-2009';
instance.LSWKT_CHGOFF_RECOV.SP (P_AS_OF_DT, REF_CUR);
DBMS_OUTPUT.Put_Line('REF_CUR =');
IF REF_CUR%ISOPEN THEN
DBMS_OUTPUT.Put_Line(' SOURCE_CD AS_OF_DT CHRG_OFF_RECOV PROCESS_DT EFFECT_DT ACCOUNT_NBR NAICS_CD PROD_TYPE OFF_NBR BORROWER_NM TRAN_TYPE_CD TRAN_TYPE_DESC TRAN_AMT NOTE_DT ACCRU_CD NON_ACCR_CD COMM_SB_IND');
LOOP
FETCH REF_CUR INTO REF_CUR_row;
EXIT WHEN REF_CUR%NOTFOUND;
DBMS_OUTPUT.Put_Line(
' ' || '[TPR_SOURCE_CD%type]'
|| ' ' || '[TPR_AS_OF_DT%type]'
|| ' ' || '''' || REF_CUR_row.CHRG_OFF_RECOV || ''''
|| ' ' || '[DTGLTRAN%type]'
|| ' ' || '[DTGLTRAN%type]'
|| ' ' || '[LCONTID%type]'
|| ' ' || '[SDATA%type]'
|| ' ' || '''' || REF_CUR_row.PROD_TYPE || ''''
|| ' ' || '[SCTRCDTY%type]'
|| ' ' || '[SCUSTNM%type]'
|| ' ' || '[SGLCD%type]'
|| ' ' || '[SGLCD%type]'
|| ' ' || '[CTRANAMT%type]'
|| ' ' || '[DTBK%type]'
|| ' ' || NVL(TO_CHAR(REF_CUR_row.ACCRU_CD), 'NULL')
|| ' ' || '[DTLSTINCSUS%type]'
|| ' ' || '''' || REF_CUR_row.COMM_SB_IND || '''');
END LOOP;
ELSE
DBMS_OUTPUT.Put_line(' (Ref Cursor is closed)');
END IF;
COMMIT;
END;
pojawia się błąd:
ORA-06502: PL/SQL: numeryczny lub błąd wartości
Mam nadzieję, że to wyczyści nieco więcej.
Wszystko co widzę to spc - gdzie jest bdy? –
Jaki "problem" masz? – kurosch
Problem, który mam, polega na tym, że gdy próbuję odczytać kursor ref, otrzymuję błędy. Umieściłem Spc tylko po to, by pokazać, jak wygląda moja ref ref, i mam nadzieję, że ktoś może mi pokazać kod PL/SQL, który będzie działał w SQL Developer, aby go wyprowadzić. – Wade73