- 浏览: 1230949 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
过程示例
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游标与异常.rar (134.1 KB)
- 下载次数: 1
发表评论
-
Jdbc执行很慢,而PLSQL执行快的问题解决
2016-04-14 13:51 12216最近在检查一方法时发现程序执行SQL查询时非常慢,但使用P ... -
org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之间
2016-04-07 14:13 1017今天生产环境tomcat启动后,用户登录时系统报错:java ... -
rollup()和rollup(())的区别
2015-08-21 14:50 721引用:http://blog.csdn.net/damen ... -
Oracle hint
2014-09-25 12:31 631转自:http://www.cnblogs.com/ebs ... -
Oracle hint用法
2014-09-25 12:12 4911. /*+ALL_ROWS*/ 表明对语 ... -
Oracle表与索引的分析及索引重建
2014-09-25 12:09 759转自:http://www.cnblogs.co ... -
Oracle的优化器的RBO和CBO方式
2014-09-25 11:30 437转自:http://www.blogjava.net/wx ... -
P6Spy SQL语句拦截工具
2013-08-20 15:58 2054P6Spy P6Spy 是一个可 ... -
ORACLE快照原理及实现总结
2013-03-18 13:23 4224转:http://blog.csdn.net/lingo0 ... -
plsql developer 使用技巧
2013-01-25 17:48 1209plsql developer 使用技巧 Oracle数据 ... -
Oracle字符集查看及修改
2012-12-12 17:04 816Oracle字符集查看及修改 http://blog.csd ... -
Oracle性能优化系列
2012-12-04 13:41 873Oracle删除重复数据的一种高效的方法 Oracle性能优化 ... -
java.sql.SQLException: Io 异常: Got minus one from a read call
2012-12-04 11:14 36175Tomcat服务器下的应用连接Oracle时报错,出现以下异常 ... -
Oracle中round() 函数与trunc()函数的比较
2012-11-29 14:32 921转:http://blog.sina.com.cn/s/blo ... -
Oracle百万记录sql语句优化技巧
2012-11-12 14:56 922转:http://www.cnblogs.com/er ... -
Oracle 获取当前日期及日期格式
2012-11-05 16:26 998转自:http://blog.sina.com.cn/s/bl ... -
Oracle CASE WHEN 用法介绍
2012-11-05 16:19 759转:http://www.cnblogs.com/eshizh ... -
ORACLE 日期加减操作
2012-11-05 15:14 757转自:http://www.cnblogs.c ... -
update关联更新在sqlserver和oracle中的实现[转]
2012-09-18 16:23 1020from: http://www.webjx.com/html ... -
plsql developer导入导出数据库方法
2012-06-15 14:23 1267转:http://blog.csdn.net/leeli198 ...
相关推荐
### Oracle游标与异常处理详解 #### 一、Oracle游标概述 **游标**是Oracle SQL中的一个重要概念,主要用于处理从数据库中提取的数据。它提供了在程序中逐行访问和处理查询结果的能力。 ##### 1.1 游标概念 - **...
游标和异常处理 游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将...
在本篇讨论中,我们将深入理解Oracle游标、异常处理以及如何在存储过程中使用它们。 1. **Oracle游标**: - **定义**:Oracle游标是数据库系统提供的一种机制,用于在结果集中定位并处理单条记录。它实际上是一个...
福建省电力公司oracle培训教材--PLSQL之游标与异常处理
Oracle数据库系统中,游标和异常处理是两个关键概念,特别是在复杂的数据库操作和程序设计中。游标允许我们逐行处理查询结果,而异常处理则提供了错误管理的机制,确保程序在遇到错误时能优雅地恢复或终止。 首先,...
实验报告的主题集中在游标和异常处理,这是Oracle编程中两个关键的概念。游标用于遍历和操作查询结果集,而异常处理则确保在遇到错误时程序能够优雅地恢复或提供反馈。 一、游标的应用 1. 隐式游标: Oracle数据库...
游标和异常处理是PL/SQL编程中的重要概念,它们在数据库操作中起到关键作用,尤其是在处理批量数据和错误管理时。以下是对这两个主题的详细解释: **游标** 游标是PL/SQL中用于遍历和操作结果集的机制。它们允许...
游标还可以与PL/SQL块结合使用,进行更复杂的逻辑操作,例如条件判断、循环结构和异常处理。在实际应用中,游标常用于迭代处理数据,比如批量更新或删除记录。 此外,Oracle还提供了隐式游标,它是在执行DML语句时...
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...
#### 六、异常处理 - 在处理游标的过程中可能会遇到异常情况,比如没有找到符合条件的数据。 ```sql EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Employee Number Not Found!'); ``` #### 七...
总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...
`%NOTFOUND`在异常处理中可能不起作用。 **三、显式游标** 显式游标由用户声明并管理,提供了更灵活的控制。显式游标的操作步骤包括: 1. 声明游标(DECLARE):定义游标的结构和查询。 2. 打开游标(OPEN):...
Oracle游标是数据库管理系统中的一种数据处理机制,它允许用户按需逐行处理查询结果,而不是一次性加载所有数据。在Java编程中,我们通常通过JDBC(Java Database Connectivity)来与Oracle数据库交互,其中游标扮演...
#### 四、游标与异常处理 在使用游标处理数据时,可能会遇到各种异常情况,如没有找到数据(`NO_DATA_FOUND`)或找到多条记录(`TOO_MANY_ROWS`)等。PL/SQL提供了异常处理机制来应对这些情况: ```sql DECLARE CURSOR...
游标和异常处理是Oracle数据库管理系统中两个重要的概念,它们在处理复杂的数据库操作时起着关键作用。 **游标** 游标(Cursor)是SQL语言中的一个重要特性,它提供了一种方式来逐行处理查询结果集。游标分为显式...
### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...
对于这些DML语句,PL/SQL中的语法与SQL中基本一致,需要注意的是变量的作用范围,以及异常处理机制。 当执行DML语句后,会得到一些结果,这些结果可以利用游标的属性来获取。例如,可以知道语句执行后是否影响到...
显式游标需要在 PL/SQL 块的声明部分声明,在执行部分或异常处理部分打开,取出数据,关闭。 一、游标的声明 在 PL/SQL 中,游标的声明使用 CURSOR 关键字,例如: ```sql DECLARE CURSOR c_emp IS SELECT * FROM...