[英]PL/SQL API call/query returns multiple records, how to pass into multiple variables
I have this api_call in oracle sql like this:我在 oracle sql 中有这个 api_call 像这样:
select sb_transfer_crse.f_query_all('000497') from dual;
The response looks like this:响应如下所示:
SHBTATC_SBGI_CODE SHBTATC_PROGRAM SHBTATC_TLVL_CODE SHBTATC_SUBJ_CODE_TRNS SHBTATC_CRSE_NUMB_TRNS SHBTATC_TRNS_TITLE
------ ------------ -- ---------------------------------------------------------------------------------
000497 ...... UG AAA 010 Acad Achievement Pre-College
000497 ...... UG AAA 050 Semester Survival
000497 ...... UG AAA 070 Special Topics
000497 ...... UG AAA 071 Special Topics
000497 ...... UG AAA 072 Special Topics
000497 ...... UG AAA 073 Special Topics
I am trying to pass the response data into variables either to handle one a time in a loop or if possible take them all and export to a temp/new table我试图将响应数据传递到变量中,以便在循环中一次处理一个,或者如果可能的话,将它们全部取出并导出到临时/新表
What i have so far looks like this:我到目前为止看起来像这样:
Declare
--variables for query
VAR_p_sbgi_code shbtatc.shbtatc_sbgi_code%TYPE;
--Variables for Data being returned
VAR_r_sbgi_code shbtatc.shbtatc_sbgi_code%TYPE;
VAR_r_program shbtatc.shbtatc_program%TYPE;
VAR_r_tlvl_code shbtatc.shbtatc_tlvl_code%TYPE;
VAR_r_subj_code_trns shbtatc.shbtatc_subj_code_trns%TYPE;
VAR_r_crse_numb_trns shbtatc.shbtatc_crse_numb_trns%TYPE;
VAR_r_trns_title shbtatc.shbtatc_trns_title%TYPE;
Begin
select sb_transfer_crse.f_query_all(p_sbgi_code => VAR_p_sbgi_code)
INTO VAR_r_sbgi_code,VAR_r_program,VAR_r_tlvl_code,VAR_r_subj_code_trns,VAR_r_crse_numb_trns,VAR_r_trns_title
From Dual;
End;
The problem is I am used to dealing with getting one result/response, not 6. and I'm not sure how to loop through the results?问题是我习惯于处理获得一个结果/响应,而不是 6。而且我不确定如何遍历结果?
Any help would be appreciated.任何帮助,将不胜感激。
This is the function:这是函数:
Function f_query_all(p_sbgi_code shbtatc.shbtatc_sbgi_code%TYPE,
p_program shbtatc.shbtatc_program%TYPE DEFAULT NULL)
RETURN transfer_crse_ref
This is what transfer_crse_ref is:这就是 transfer_crse_ref 的含义:
transfer_crse_ref
TYPE transfer_crse_ref IS REF CURSOR RETURN transfer_crse_rec;
Entity cursor variable type
and this is what transfer_crse_rec looks like:这就是 transfer_crse_rec 的样子:
transfer_crse_rec
TYPE transfer_crse_rec IS RECORD (
r_sbgi_code shbtatc.shbtatc_sbgi_code%TYPE,
r_program shbtatc.shbtatc_program%TYPE,
r_tlvl_code shbtatc.shbtatc_tlvl_code%TYPE,
r_subj_code_trns shbtatc.shbtatc_subj_code_trns%TYPE,
r_crse_numb_trns shbtatc.shbtatc_crse_numb_trns%TYPE,
r_term_code_eff_trns shbtatc.shbtatc_term_code_eff_trns%TYPE,
r_trns_title shbtatc.shbtatc_trns_title%TYPE,
r_trns_low_hrs shbtatc.shbtatc_trns_low_hrs%TYPE,
r_trns_high_hrs shbtatc.shbtatc_trns_high_hrs%TYPE,
r_trns_review_ind shbtatc.shbtatc_trns_review_ind%TYPE,
r_tast_code shbtatc.shbtatc_tast_code%TYPE,
r_trns_catalog shbtatc.shbtatc_trns_catalog%TYPE,
r_tgrd_code_min shbtatc.shbtatc_tgrd_code_min%TYPE,
r_group shbtatc.shbtatc_group%TYPE,
r_group_primary_ind shbtatc.shbtatc_group_primary_ind%TYPE,
r_protect_ind shbtatc.shbtatc_protect_ind%TYPE,
r_crse_desc shbtatc.shbtatc_crse_desc%TYPE,
r_user_id shbtatc.shbtatc_user_id%TYPE,
r_data_origin shbtatc.shbtatc_data_origin%TYPE,
r_internal_record_id gb_common.internal_record_id_type);
Business Entity record type
Ok with the help of @justinCave when they mentioned the ref_cursor i was able to figure out a solution that gives me the results in a way I can get the data to variables:好的,在@justinCave 的帮助下,当他们提到 ref_cursor 时,我能够找出一个解决方案,该解决方案以一种可以将数据传递给变量的方式为我提供结果:
declare
symbol_cursor BANINST1.sb_transfer_crse.transfer_crse_ref;
symbol_record BANINST1.sb_transfer_crse.transfer_crse_rec;
begin
symbol_cursor := sb_transfer_crse.f_query_all(p_sbgi_code => '000497');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here, e.g.:
dbms_output.put_line(symbol_record.r_sbgi_code|| ',' ||symbol_record.r_program|| ',' ||symbol_record.r_tlvl_code|| ',' ||symbol_record.r_subj_code_trns|| ',' ||symbol_record.r_crse_numb_trns|| ',' ||symbol_record.r_term_code_eff_trns|| ',' ||symbol_record.r_trns_title|| ',' ||symbol_record.r_trns_low_hrs|| ',' ||symbol_record.r_trns_high_hrs|| ',' ||symbol_record.r_trns_review_ind|| ',' ||symbol_record.r_tast_code|| ',' ||symbol_record.r_trns_catalog|| ',' ||symbol_record.r_tgrd_code_min|| ',' ||symbol_record.r_group|| ',' ||symbol_record.r_group_primary_ind|| ',' ||symbol_record.r_protect_ind|| ',' ||symbol_record.r_crse_desc|| ',' ||symbol_record.r_user_id|| ',' ||symbol_record.r_data_origin|| ',' ||symbol_record.r_internal_record_id);
end loop;
CLOSE symbol_cursor;
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.