oracle存储过程中if条件后的sql没有执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程中if条件后的sql没有执行相关的知识,希望对你有一定的参考价值。
create procedure proc_kaoqin
as
v_id int;
v_id2 int;
v_inprout varchar2(20);
v_inprout1 varchar2(20);
begin
select min(id) into v_id from kaoqin_temp;
select max(id) into v_id2 from kaoqin_temp;
while v_id+1<=v_id2
loop
select in_or_out into v_inprout from kaoqin_temp where id=v_id;
select in_or_out into v_inprout1 from kaoqin_temp where id=v_id+1;
dbms_output.put_line(v_id);
dbms_output.put_line(v_inprout);
dbms_output.put_line(v_inprout1);
if trim(v_inprout)=trim(v_inprout1) then
dbms_output.put_line('hehe');
delete from kaoqin_temp where door='部门门' and id in(v_id,v_id+1);
update kaoqin_temp set id=v_id+1 where door='正大门';
dbms_output.put_line('haha');
end if;
v_id:=v_id+1;
end loop;
dbms_output.put_line('hehe');dbms_output.put_line('haha'); 都执行了,但中间的两条sql语句没有执行,这是为什么
下面是表kaoqin_temp中的数据:
id time name card_num door in_or_out
1 01-AUG-16 06.35.00.000000 PM 张小平 1111111 部门门 正常出门
2 01-AUG-16 06.45.00.000000 PM 张小平 1111111 正大门 正常出门
3 01-AUG-16 07.45.00.000000 PM 张小平 1111111 正大门 正常进门
4 01-AUG-16 07.55.00.000000 PM 张小平 1111111 部门门 正常进门
提示的错误是第12行代码会返回多行数据。还有我测试的时候发现if条件里的sql语句没有执行。
没有用的,这句dbms_output.put_line('haha');
都执行了
因为这句后面有个封号...
追问我删除了所有的输出语句后,结果还是一样的。
我补充了问题 你看看
1 1 01-AUG-16 06.35.00.000000 PM 张小平 1111111 卫星导航事业部 部门门 正常出门
2 2 01-AUG-16 06.45.00.000000 PM 张小平 1111111 卫星导航事业部 正大门 正常出门
这是表里面的数据
update kaoqin_temp set id=v_id+1 where door='正大门';
你的id 应该是主键吧, 这个update的语句 满足条件的有多条数据, 所以update不能成功执行。 根据你要更新的数据,再添加限制条件
是的,非常感谢您。
oracle存储过程连续执行结果不同
pl/sql里执行存储过程,f8执行后查看结果集,每次都累加.必须把窗口关闭重新测试.
这是pl/sql本来就这样的吗,还是我存储过程写的不对??
存储过程:
http://hi.baidu.com/sordhmbreabivzq/item/a1626cca2873c3ce994aa05b
存储过程是别人写的,我完全不懂,能帮我瞅一眼么??? 是不临时表没清空啥的啊?
麻烦帮忙看下,存储过程完全不懂,上面是连接,谢谢
追答那个存储过程,是有insert这个插入处理的,会导致你数据一直在增加,增加完再查询所以出来的结果就一直增加且重复了。
那个存储过程,是有insert这个插入处理的,会导致你数据一直在增加,增加完再查询所以出来的结果就一直增加且重复了。
追问但是 我该肿么办呢??
追答你为嘛要怎么办呢?如果你只是要查询当前的数据,就去掉那段insert语句,主要是看你自己是什么样的需求,要做什么样的业务,就得按自己的逻辑去做程序。
参考技术A 这肯定不是PL/SQL的原因,具体是什么问题需要分析存储过程本身才知道。追问麻烦帮忙看下,存储过程完全不懂,上面是连接
追答很奇怪,这个存储过程应该是关掉窗口重新测试同样会累加的,除非你在另外执行了什么操作清空了J2131_Z_J213_R_TMP这个表。要做到在J213_R这个表不变的情况下每次执行存储过程的结果一样,需要在存储过程的最前面也就是begin之后,INSERT INTO J2131_Z_J213_R_TMP之前加一行:
truncate table J2131_Z_J213_R_TMP;
是啊,J2131_Z_J213_R_TMP不是一张物理表么,我感觉也很奇怪. 你说的语法好像有点问题:
begin
truncate table J2131_Z_J213_R_TMP
INSERT INTO J2131_Z_J213_R_TMP(
pl/sql提示:
少写了一个分号
本回答被提问者采纳 参考技术B 和plsql没什么关系,和你写的程序以及你要完成的功能有关系。追问麻烦帮忙看下,存储过程完全不懂,上面是连接
以上是关于oracle存储过程中if条件后的sql没有执行的主要内容,如果未能解决你的问题,请参考以下文章
oracle 用if sqlcode != 0 来判断sql语句是不是成功 sqlserver 存储过程 怎样判断一条sql语句执行成功了没有