Oracle有关于游标的操作

这里贴一篇写的很详细的有关游标的博客,认为写的详细是因为他附带了代码,认真读一下的话很容易理解代码内部怎么实现(传送门),等我写了大作业在回来填坑,补一些常规操作。

-----------我是分割线------

第一次填坑,数据库大作业还的我晚上调了很长时间的bug,感觉最后做的差不多都是靠着SQL develop这个界面,显示的报错信息很详细。但我在写每周商家汇总的时候出现了一个神奇bug(主要还是我太弱了),我明明在套用两个存储过程前,我对于两个存储过程都进行了测试,但我把他们组合在一起的时候,下面oracle就提示我什么什么丢包,但是我之前写其他的过程函数嵌套的时候也没有出现什么错误啊,我只好是认为是游标出现了问题,调试了好长时间我也没有搞定,最后只好换成调用聚集函数,总算运行正常

贴一下关于游标的示例代码:(查询近7天内所有商家的总销售额,并汇总到QQUERY表中,(其中包括在过程中建表,删表,以及日期的比较方法))

create or replace procedure query_sal
is
    ok number;
    t_build varchar2(400);
    cursor jj is select smno from saleman;
    res int;
    
    ans number(10);
    val number(10);
    resname varchar2(30);
    
    now_ti date;
    pre_date date;
    now_date date;
begin
    select count(1) into ok from user_tables where table_name = upper('qquery');
    if ok>0 then
        execute immediate 'drop table qquery';
    end if;
    t_build :='
        create table qquery(
            smno number(10),
            store_name varchar2(30) not null,
            q_money number(10),
            primary key(smno)
        )
    ';
    execute immediate t_build;
    
    select sysdate - interval '7' day into pre_date from dual;
    select SYSDATE into now_date from dual;
    LOOP
        if not jj%ISOPEN then
            open jj;
        end if;
        fetch jj into res;
        EXIT WHEN jj%NOTFOUND OR jj%NOTFOUND IS NULL;
        
        select smno,sum(csmmoney) into val,ans from consume where smno=res and (csmdate between pre_date and now_date) group by smno;
        select store_name into resname from saleman where smno=res;
        insert into qquery values(res,resname,ans);
    END LOOP;

end;

 

posted @ 2018-12-10 22:21  啦啦啦天啦噜  阅读(292)  评论(0编辑  收藏  举报