oracle存储过程遇到的问题
最近新的项目,会批量执行数据,用到了存储过程和函数,遇到的问题记录如下:
1、涉及大量数据,所以决定分批commit数据
2、out无论是存储过程还是函数,都会返回数据,当时当我们手动raise(抛出异常时),参数并不会返回。感觉应该和java代码一样,抛出异常,被上层调用捕获,并没有返回值
3、MSG := SQLCODE || SQLERRM;可以查看错误信息
4、设计相关,最原子性的操作如果抛出异常后,可以通过错误代码,错误信息传送给调用者,依次传送到最外层调用者。最后返回给程序调用者
5、建包后,可能调试进不到程序中(没有验证)
6、如果存储过程不能debug执行到存储过程中,可以尝试重新编译
7、计算时,例如计算相差时间,可以通过伪表dual,将数据into到声明的变量中
8、可以自定义类型type,封装参数
9、动态sql语句,要用到动态游标,如下
--定义一个动态游标
TYPE REF_CURSOR_TYPE IS REF CURSOR;
--定义游标类型
INFO_CURSOR REF_CURSOR_TYPE;
10、循环游标暂时知道两种方式
有一种带参数的游标,项目中没有用到,参考http://blog.csdn.net/s630730701/article/details/68938837
10.1、
不用手动打开关闭游标
FOR 自定义随便起名 IN 游标名称 LOOP
END LOOP;
10.2、
--声明游标
CUSOR 游标名称 IS
查询语句;(普通游标)
--打开游标
OPEN INFO_CURSOR FOR VSQL;(动态游标);
OPEN INFO_CURSOR(普通游标);
--循环游标
LOOP
FETCH 游标名称 INTO 变量;
EXIT WHEN 游标名称%NOTFOUND;
END LOOP;
--关闭游标
CLOSE 游标;
11、执行动态sql
计算条数:
EXECUTE IMMEDIATE 动态SQL名称 INTO 变量;
12、遇到死锁等问题,可以用sys登录,在工具栏中的session,kill掉session。如下所示
posted on 2017-07-26 09:40 struggle_beiJing 阅读(688) 评论(1) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2016-07-26 修改系统时间,导致百度上不去