oracle游标错误,ORACLE游标与错误处理
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('4403447904');
loop
fetch mycusor into myrecord.id;
exit when mycusor%notfound;
DBMS_OUTPUT.put_line(myrecord.id);
end loop;
close mycusor;
end;
oracle游标错误,ORACLE游标与错误处理相关推荐
- oracle中判断空,Oracle中判断空游标的方法
1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...
- [Oracle]使用非滚动游标
源码:xx.pc /* 功能:演示了Oracle非滚动游标操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长 ...
- oracle有三种类型的异常错误: 预定义 ( Predefined )错误里面的常见错误
oracle有三种类型的异常错误: 预定义 ( Predefined )错误, 非预定义 ( Predefined )错误, 用户定义(User_define) 错误 预定义 ( Predefined ...
- oracle返回0001错误,ORACLE 异常错误处理
本篇主要内容如下: 5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4 用户定义的异常处理 5.2 异常错误传播 5.2 ...
- Oracle学习笔记 --- Oracle ORA错误解决方案
今天在Debug的时候报错了如下信息: 后来综合了网上的东西,总结如下: ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-000 ...
- Oracle 快速入门 触发器游标
目录 一.触发器 1.什么是触发器(概念)? 2.创建触发器语法(史上最难的oracle语法,没有之一) 3. 触发器组成三部分: 4. 前触发与后触的原理图 5. 在级联表中创建触发器案例 二.程序 ...
- oracle存储过程详解--游标 实现增、删、改、查的
注:以下是转来的内容,但是设计PLSQL代码,原文有问题,所以PLSQL代码我都验证修改了.测试需要在scott/tiger下进行,对于没有的表,需要自行创建,表复制的语句为 CREATE TABLE ...
- Oracle 11g Release 1 (11.1) 游标——显式游标
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#CIHCAHJA 本文内容 声明一个游标 打开一个游标 用游标获取一个 ...
- oracle ora 00279,ORA-01245、ORA-01547错误的解决
数据库rman restore database 之后,执行recover database的时候,报告ORA-01245错误,详细的错误信息如下: SQL> recover database ...
- Oracle关于java.sql.SQLException常见错误集锦
最近使用Oracle时老是遇到java.sql.SQLException错误,害得我在网上查得累死累活的,所以一口气查了一下几个常见的,在此列了列.英文是来自官方的,用中文简单翻译了一下,有一些实在不 ...
最新文章
- 阿里达摩院2020趋势第一弹:感知智能的“天花板”和认知智能的“野望”
- python下载指定的版本包
- Taro+react开发(91):chidren和组合
- 从金庸的武侠到数学的江湖
- mysql decode语句_MySQL复制问题的分析
- 电商有可能决定一个工厂的生死存亡
- python3 安装PIL
- oracle 中关于 SID db_name、instance_name (转)
- 英寸和厘米的交互python_Python / PyQt4:如何找到显示器的尺寸(以英寸为单位)?...
- python可以做exe文件吗_手动制作python的exe可执行程序
- 遗传算法的C语言设计
- 新手如何备考GRE考试作文
- Java 学生管理系统 GUI txt文件存储
- 软件设计过程--概要设计详细设计
- 喵的Unity游戏开发之路 - 攀爬
- cocos creator 学习随笔 day03 节点和组件属性
- Java 用键盘输入 int型 String型 char型数据 示例:简单计算功能 eclipse
- 节假日api--java调用与获取数据
- 基于Sequoia DB巨杉数据库的投资组合评比器(设计思路)
- 播放3d影片 android,手机上怎么观看3D电影?
热门文章
- Linux高效数据统计命令wc
- Eclipse安装 Activiti Designer插件
- Guice系列之用户指南(十)
- linux 命令详解 十一
- HTTP长连接、短连接
- linux 内核 发送数据,linux 内核tcp数据发送的实现
- 开源网络爬虫WebCollector的demo
- Leetcode 202. 快乐数 解题思路及C++实现
- 数据源配置和自动管理
- 定时任务 ||​​​​​​​​​​​​​​ Cron表达式