如果我们已经定义了一组查询,如何在过程中运行游标?

时间:2018-09-20 11:31:39

标签: oracle

我有一个在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;

1 个答案:

答案 0 :(得分:0)

您没有提供任何错误消息指示或任何有助于确定问题的详细信息。我不确定为什么要嵌入嵌入式DECLARE ... BEGIN ... END,为什么在代码中间需要COMMIT,或者为什么根本没有COMMIT-它应该由调用过程来提交。 / p>

我认为以下“感觉”对我来说更正确;

composer dumpautoload -o

游标循环可能使用BULK COLLECT,但没有数据量的指示,我不能说是否值得。