Oracle9i中关于select into的执行过程
来源:互联网 发布:婵真淘宝旗舰店整顿 编辑:程序博客网 时间:2024/06/06 02:28
天查询一些内容,发现一些内容不对头,找来找去,发现是select into 的问题。
原来的代码是这样的,外面的大循环就不再多写了(我的环境是9iR2)
begin
--获得自己的基本信息
SELECT ParentCode,ID,grade INTO V_ParentCode,
V_ID,V_GRADE FROM TDEPTS WHERE DEPTCODE=P_DEPTCODE;
BEGIN
--Oracle 的 bug还是问题了?
SELECT ParentCode INTO V_ParentCode FROM TDEPTS WHERE FID=V_ID AND ROWNUM<=1;
EXCEPTION
WHEN OTHERS THEN
null
END;
exception
when others then
--当作没有下级
return 1;
end;
在调试的时候,发现变量V_ParentCode还是保留了原来的内容(原来不是空的),这样导致在后来的操作中出现了自己意料之外的内容。
例如上次调用的时候V_PARENTCODE='0001',本次调用返回异常,则V_PARENTCODE还是'0001';
不得已,进行了一些调整:
---------------------------
begin
SELECT ParentCode,ID,grade INTO V_ParentCode,
V_ID,V_GRADE FROM TDEPTS WHERE DEPTCODE=P_DEPTCODE;
BEGIN
SELECT ParentCode INTO V_SUBParentCode FROM TDEPTS WHERE FID=V_ID AND ROWNUM<=1;
EXCEPTION
WHEN OTHERS THEN
V_SUBParentCode:=NULL; --必须手工设置为null,否则可能保持原来的内容
--到底是什么意思
END;
exception
when others then
--当作没有下级
return 1;
end;
最重要的改动是红色字体部分。 V_SUBParentCode初始化的时候是空的。所以,如果没有数据的话,还是空的。
结果就对了。 但为什么这样了? 难道是因为有了意外处理?。。。。
--
后来发现在10g中也是如此,这么看来,只能是说,select into 的过程是分两步的:
1)查询出数据,如果有异常,引发异常.
2)把查询的结果赋予变量.
在第一步中如果没有活得数据则直接的跳跃到异常处理部分,只有这样的解释才能说明为什么变量还是保留前次的状态.
- Oracle9i中关于select into的执行过程
- 在存储过程中SELECT INTO的注意事项
- 关于Mysql中select into outfile权限的探讨
- Oracle中insert into select和select into的用法
- Oracle中insert into select和select into的用法
- Oracle中insert into select和select into的区别
- Oracle中insert into select和select into的区别
- 关于select into NO_DATA_FOUND的处理
- 在MySql中建立存储过程和解决insert into select 中主键冲突的问题
- select into 临时表再使用过程中所遇到的问题和相应的解决方案
- 数据块错误引起存储过程中select into的异常
- 同一个存储过程中,不能多次select into 到同一张表的问题
- Oracle 过程中的select into 中查询记录数不是1导致异常的解决办法
- mysql存储过程中使用select count(*) into 变量名 from +表+ where条件的用法
- 关于Oracle9i中BLOB类型的操作
- oracle 中 实现 sqlserver的select into
- MySQL中INSERT INTO SELECT的使用
- MySQL中INSERT INTO SELECT的使用
- 关于synchronized的认识一
- 北邮方滨兴校长在2013届本科生毕业典礼上的讲话
- 10161 - Ant on a Chessboard
- Windows 程序设计 第21章 DLL
- eclipse简单配置使开发更快更流畅
- Oracle9i中关于select into的执行过程
- web一些值得珍藏的代码
- 老板运煤问题及解决方案
- Ogre材质脚本
- 通过 Socket 发送 Http协议 上传图片到速卖通服务器过程中遇到的一些小的问题 总结
- DLL文件 获取或修改
- Servlet处理HTTP响应
- 创建Flex项目(无服务器的情况下)
- 面试题20:顺时针打印矩阵 ***