我有一个在oracle中定义的带有一些查询的过程。现在我需要在两者之间添加一个光标。我已经在程序中定义了游标,并且编译成功。但是,每当我要运行该过程时,它只会运行查询部分直到游标出现。 请任何人帮助我 预先感谢。
这是程序:
create or replace PROCEDURE REPORT_GENERATE_PROC_REG
(
reportyyyymm number,
report_region VARCHAR2,--NR/WR/ETC
meetingdate date,--date
meetingdesc VARCHAR2,--desc
generateby VARCHAR2,--userid
companycode VARCHAR2,--userid
ret_int OUT INT, --- 0 if error report number if success
ret_msg OUT VARCHAR2 -- error message if error blank if success
)
AS
final_report_id INTEGER :=0;
total_column_no INTEGER :=0;
V_NO INTEGER;
BEGIN
select max(rid) into final_report_id from hindi_report_gen_new; --max rid is stored in final_report_id
final_report_id := final_report_id + 1;
insert into hindi_report_gen_new
values(final_report_id,
'Report generated for '|| companycode ||'for Quarter ending in '||
reportyyyymm ||'\n Meeting Held on '|| meetingdate||'\n Desc is '||
meetingdesc, reportyyyymm,meetingdate,meetingdesc, generateby,sysdate,
companycode);
commit;
-- inserting the data for reports
DECLARE
CURSOR ADI_CURR IS
SELECT DISTINCT ROW_NO FROM HINDI_TEST WHERE REPORT_NO=final_report_id and row_no not in(0,37,38);
BEGIN
OPEN ADI_CURR;
LOOP
FETCH ADI_CURR INTO V_NO;
insert into hindi_region_report
select a.report_no,a.row_no,c.STATE_CORD,a.value from hindi_test a join hindi_trn_report_header b on a.column_no=b.REPORT_NO join hindi_mst_cost_centre c on c.cost_centre_code=b.COST_CENTRE_CODE where row_no=v_no and a.report_no=final_report_id;
EXIT WHEN ADI_CURR%NOTFOUND;
END LOOP;
CLOSE ADI_CURR;
END;
-- inserting sum of all rows
insert into test_test
select final_report_id,row_no,column_no,sum(value) from hindi_region_report where report_no=final_report_id and row_no not in(0,22,25,28,37,38)
group by final_report_id,row_no,column_no;
commit;
END REPORT_GENERATE_PROC_REG;
答案 0 :(得分:0)
您没有提供任何错误消息指示或任何有助于确定问题的详细信息。我不确定为什么要嵌入嵌入式DECLARE ... BEGIN ... END,为什么在代码中间需要COMMIT,或者为什么根本没有COMMIT-它应该由调用过程来提交。 / p>
我认为以下“感觉”对我来说更正确;
composer dumpautoload -o
游标循环可能使用BULK COLLECT,但没有数据量的指示,我不能说是否值得。