整容说文库 > 程序代码 > 教育资讯

存储过程为什么if后面的插入动作没有执行

来源:学生作业帮助网 编辑:整容说文库 时间:2020/10/24 06:28:04 程序代码
存储过程为什么if后面的插入动作没有执行程序代码
zhouxiaojian1985 于 2011-02-21 11:43:18 编辑 [code=SQ]
 v_count       NUMBER          := 0;
BEGIN

  SELECT COUNT (*)
           INTO v_count
           FROM A;
  
   IF v_count = 0
      THEN
         INSERT INTO A.ID
            SELECT B.ID
              FROM B
             WHERE B.ID = 'XXX'
      END IF;

      COMMIT;
END
[/code]

请问一下没有执行插入的原因是什么?我把这个存储过程写在代码里就OK的,真是奇怪了

declare
v_count      NUMBER          := 0; 
BEGIN 

  SELECT COUNT (*) 
          INTO v_count 
          FROM A; 
  
  IF v_count = 0 
      THEN 
        INSERT INTO A(ID) 
            SELECT B.ID 
              FROM B 
            WHERE B.ID = 'XXX' ;
      END IF; 

      COMMIT; 
END ;
v_count不等于0
引用 1 楼 minitoy 的回复:
declare
v_count      NUMBER          := 0; 
BEGIN 

  SELECT COUNT (*) 
          INTO v_count 
          FROM A; 
  
  IF v_count = 0 
      THEN 
        INSERT INTO A(ID) 
            S……


不好意思,我写错了,我写的是INSERT INTO A(ID),就是感觉if后面的没有执行,我拿到代码分步执行都是可以的
代码没什么问题,估计是数据的问题
引用 3 楼 zhouxiaojian1985 的回复:
引用 1 楼 minitoy 的回复:

declare
v_count NUMBER := 0;
BEGIN

SELECT COUNT (*)
INTO v_count
FROM A;

IF v_count = 0
THEN
INSERT INTO A(ID)
S……


不好意思,我写错了,我写的是INSERT INTO A(ID),就是感觉if后面的没有执……
条件没有满足
你怎么知道没有执行呢,是插入了0条吧
我插入后还有一个查询动作的,即查询-为0则插入-再查询

1 我把这3个动作写到存储过程调用的时候,插入应该是没有执行,所以最后查询不到数据;
2 把3个动作写在代码里分步执行最后能查到数据。

所以我猜测是没有做插入的动作,也可能做了,会不会是ORACLE缓存导致的问题?
你看看SELECT COUNT (*)   INTO v_count   FROM A
这个结果是不是0
找不到原因,还是写在代码里了,谢谢大家了!
程序代码