oracle游标错误,ORACLE游标与错误处理

oracle游标错误,ORACLE游标与错误处理ORACLE 游标与异常处理过程示例 createorrepl TASK QUERYisg nametask company stock list g name type code ttask company stock list code t type firm codetask company stock

ORACLE游标与异常处理

过程示例

create or replace procedure PROC_TASK_QUERY

is

g_name task_company_stock_list.g_name%type;

code_t task_company_stock_list.code_t%type;

firm_code task_company_stock_list.firm_code%type;

firm_name task_company_stock_list.firm_name%type;

unit_name task_company_stock_list.unit_name%type;

in_qty task_company_stock_list.in_qty%type;

out_qty task_company_stock_list.out_qty%type;

id_d task_company_stock_detail.id%type;

eml_id_d task_company_stock_detail.eml_id%type;

busi_type_d task_company_stock_detail.busi_type%type;

refer_doc_d task_company_stock_detail.refer_doc%type;

pass_gate_time_d task_company_stock_detail.pass_gate_time%type;

trade_name_d task_company_stock_detail.trade_name%type;

name_d task_company_stock_detail.name%type;

move_name_d task_company_stock_detail.move_name%type;

g_qty_d task_company_stock_detail.g_qty%type;

g_name_d task_company_stock_detail.g_name%type;

unit_name_d task_company_stock_detail.unit_name%type;

code_t_d task_company_stock_detail.code_t%type;

g_no_d task_company_stock_detail.g_no%type;

sqlstr long;

moduleno varchar2(100);

userid varchar2(100);

queryp varchar2(10);

insqlmain long;

insqldetail long;

insqldetail2 long;

insqldetail3 long;

startposition number(10);

len number(10);

type sql_array is table of task_schedule_query.sqlstr%type index by binary_integer;

sqlarray sql_array;

lpindex number(10);

delimiter varchar2(10);

type cur is ref cursor ;

sqlcur cur;

incur cur;

indetailcur cur;

begin

insqlmain := ”;

insqldetail :=”;

insqldetail2 :=”;

insqldetail3 :=”;

sqlarray(1):=”;

sqlarray(2):=”;

sqlarray(3):=”;

sqlarray(4):=”;

open sqlcur for select user_id,moduleno,sqlstr,query_param from task_schedule_query where status=1;

loop

fetch sqlcur into userid,moduleno,sqlstr,queryp;

exit when sqlcur%notfound;

–构造查询字符串数组开始

delimiter:=’~’;

startposition:=1;

lpindex:= 1;

loop

select instr(sqlstr,delimiter,startposition ) into len from dual;

–dbms_output.put_line(startposition);

–dbms_output.put_line(len);

if len!=0 then

select substr(sqlstr,startposition,len-startposition) into sqlarray(lpindex) from dual;

else

select substr(sqlstr,startposition) into sqlarray(lpindex) from dual;

–dbms_output.put_line(sqlarray(lpindex));

exit;

end if;

–dbms_output.put_line(sqlarray(lpindex));

startposition:=len+1;

lpindex:=lpindex+1;

end loop;

/*

for i in 1..sqlarray.count

loop

dbms_output.put_line(sqlarray(i));

end loop;

*/

–构造查询字符串数组结束

insqlmain := sqlarray(1);

insqldetail:=sqlarray(2);

insqldetail2 :=sqlarray(3);

insqldetail3 :=sqlarray(4);

–分模块执行:企业进出仓库存查询开始

IF(moduleno=’compStockSearch’) THEN

BEGIN

update task_schedule_query set status=2,start_time=sysdate where user_id=userid and moduleno=moduleno;

IF(queryp=’1′ OR queryp=’2′) THEN

open incur for insqlmain;

loop

fetch incur into g_name,code_t,firm_code,firm_name,unit_name,in_qty,out_qty;

exit when incur%notfound;

insert into task_company_stock_list(g_name,code_t,firm_code,firm_name,unit_name,in_qty,out_qty,user_id)

values(g_name,code_t,firm_code,firm_name,unit_name,in_qty,out_qty,userid);

end loop;

close incur;

DBMS_OUTPUT.put_line(‘sqlmain is :’||insqlmain);

END IF;

IF(queryp=’2′) THEN

open indetailcur for insqldetail;

loop

fetch indetailcur into id_d,eml_id_d,busi_type_d,refer_doc_d,pass_gate_time_d,trade_name_d,name_d,move_name_d,g_qty_d,g_name_d,unit_name_d,code_t_d,g_no_d;

exit when indetailcur%notfound;

insert into task_company_stock_detail(id,eml_id,busi_type,refer_doc,pass_gate_time,trade_name,name,move_name,g_qty,g_name,unit_name,code_t,g_no,user_id)

values(id_d,eml_id_d,busi_type_d,refer_doc_d,pass_gate_time_d,trade_name_d,name_d,move_name_d,g_qty_d,g_name_d,unit_name_d,code_t_d,g_no_d,userid);

end loop;

close indetailcur;

DBMS_OUTPUT.put_line(‘sqldetail is :’||insqldetail);

END IF;

update task_schedule_query set status=3,end_time=sysdate where user_id=userid and moduleno=moduleno;

–分模块的异常处理,不影响下一个模块的处理

EXCEPTION

WHEN OTHERS THEN

update task_schedule_query set status=4 where user_id=userid and moduleno=moduleno;

END;

END IF;

–分模块执行:企业进出仓库存查询结束

end loop;

close sqlcur;

commit;

EXCEPTION

WHEN OTHERS THEN

NULL;

end;

游标的多种循环

create or replace procedure Test

is

cursor mycusor is

select eml_id,owner_code from store_in_head where rownum<10 order by eml_id ;

myrecord mycusor%rowtype;

begin

–显示游标循环

open mycusor;

loop

fetch mycusor into myrecord.eml_id,myrecord.owner_code;

exit when mycusor%notfound;

DBMS_OUTPUT.put_line(myrecord.eml_id||’,’||myrecord.owner_code);

end loop;

close mycusor;

–取游标中多少行

open mycusor;

for i in 1..3

loop

fetch mycusor into myrecord.eml_id,myrecord.owner_code;

DBMS_OUTPUT.put_line(myrecord.eml_id||’,’||myrecord.owner_code);

end loop;

close mycusor;

–特殊for循环

open mycusor;

for mycurecord in mycusor loop

DBMS_OUTPUT.put_line(mycurecord.eml_id||’,’||mycurecord.owner_code);

end loop;

close mycusor;

–特殊for循环

for myrec in (select eml_id,owner_code from store_in_head where rownum<10 order by eml_id ) loop

DBMS_OUTPUT.put_line(myrec.eml_id||’,’||myrec.owner_code);

end loop;

end;

带参数的游标:

create or replace procedure Test

is

cursor mycusor(p_firm_code varchar2) is

select id from store_in_list where firm_code=p_firm_code and rownum<10 order by eml_id ;

myrecord mycusor%rowtype;

begin

–显示游标循环

open mycusor(”);

loop

fetch mycusor into myrecord.id;

exit when mycusor%notfound;

DBMS_OUTPUT.put_line(myrecord.id);

end loop;

close mycusor;

end;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232564.html原文链接:https://javaforall.net

(0)
上一篇 2025年10月1日 下午3:01
下一篇 2025年10月1日 下午3:22


相关推荐

  • 进销存excel_用Excel制作简单的进销存系统「建议收藏」

    进销存excel_用Excel制作简单的进销存系统「建议收藏」最近刚好帮一个朋友做一个进销存系统,因为使用者对电脑操作以及Excel应用能力较弱,我做的进销存系统没有用特别复杂的功能,非常有解决意义,我将手把手将你制作一个简单的进销存系统。需求描述朋友找人合伙开了一个女装店,想要用Excel记录每天的销售数据、定期的进货数据,以及定期盘点库存情况。朋友的合伙人对电脑操作、Excel数据管理能力较弱,前期购买过专用的进销存软件,但是经常会把数据搞乱,因此放弃了…

    2022年5月31日
    57
  • 维度建模——数据仓库初步[通俗易懂]

    维度建模——数据仓库初步[通俗易懂]本文是《维度建模》后续文章的基础。我们首先从宏观层面上考察数据仓库和商业智能(DataWarehousingandBusinessIntelligence,DW/BI)系统。DW/BI系统首先应该仔细考虑的问题是业务需求。《维度建模》系列文章将紧紧抓住业务需求这一要点,逐步深入探讨逻辑设计、物理设计以及采用有关技术和工具的决策等问题。本文将详细考察数据仓库及商业智能的主要目标,辨析DW/…

    2022年5月7日
    50
  • Qt调用谷歌翻译API

    Qt调用谷歌翻译API原理 模拟 Google 翻译网页请求 ps 频繁调用会封 IP 哦 QStringGoogl translateTex QStringtext QStringsourc QStringtarge QStringretSt QStringfinal m path client m client amp sl sourceLang amp tl targetLang amp dt t amp q

    2026年3月18日
    3
  • 智谱宣布开源新一代旗舰大模型GLM-5 并宣布GLM Coding Plan涨价

    智谱宣布开源新一代旗舰大模型GLM-5 并宣布GLM Coding Plan涨价

    2026年3月12日
    2
  • 验证CSR文件

    验证CSR文件使用 openssl 命令验证 csr 信息 验证密钥对输入这个命令验证 CSR 的信息 opensslreq noout text in CSR 文件 输入这个命令验证 SSL 证书信息 opensslx509 noout text in ssl crt server crt CRT 文件 输入这个命令验证私钥 opensslrsa noout

    2026年3月18日
    2
  • 突发!阿里千问大模型负责人林俊旸离职

    突发!阿里千问大模型负责人林俊旸离职

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号