写了个存储过程,过程中插入数据,然后再查找这些新插入的数据,是不是查找不出来的?
我断点看着都执行了INSERT 语句,然后循环却查不出来。如果这样是查找不出来?有什么办法能查出来?

解决方案 »

  1.   

    insert之后,打印下sql%rowcount,看是否真的有数据插入,如果没有,要检查下insert的条件是否满足,或者insert语句是否执行异常。
      

  2.   

    你insert into数据后面要跟个commit。不然是查询不到数据的!
      

  3.   

    哦,原来要COMMIT的啊?那如果后面的其他语句报错,回滚的话,插入的数据是不是不能回滚?
      

  4.   

    同一事务里面不commit也可查询到。
      

  5.   

    CREATE OR REPLACE PROCEDURE COPY_CHAPTER AS
    o_chapter_id varchar2(64);
    n_chapter_id varchar2(64);
    tmp_chapter_id varchar2(64);CURSOR cursor_chapter IS
                SELECT chapter_id FROM chapterinfo ;
                
    BEGIN       
    OPEN  cursor_chapter;
        LOOP
            FETCH cursor_chapter INTO o_chapter_id;
            EXIT WHEN cursor_chapter%NOTFOUND;  
            
          SELECT getsequence INTO  n_chapter_id FROM dual;  
             
          INSERT INTO chapterinfo
                   (chapter_id, parent_id, layer_type) 
            SELECT n_chapter_id,'', layer_type
            FROM chapterinfo 
            WHERE chapter_id = o_chapter_id;
               
            SELECT chapter_id INTO tmp_chapter_id FROM chapterinfo WHERE chapter_id = n_chapter_id;
        END LOOP;
    CLOSE cursor_chapter;     
           
    END ; 
    最后的查询语句查不出来刚插入的数据?是要在insert 后面加COMMIT??
      

  6.   

    调试一下啊,把insert语句单独拿出来执行看有木有问题,这么简单的问题,自己调试就找出原因了。
      

  7.   

    调试时候的o_chapter_id是多少,把这个值放到insert语句里看执行结果。
      

  8.   

    我用PL/SQL DEVELOPER断点进去,把值都取出,放到插入语句,是能正常插入的。可就是在存储过程里就是插不进去。
    为什么呢???第一次写存储过程,搞了两天了。。
      

  9.   

    把表chapterinfo结构和里面的数据贴出来。
      

  10.   

    #9楼的sql没有问题,应该可以看到新数据。你先在过程的最后(循环外)加入一条commit语句。执行后看看表里有没有数据。
      

  11.   

    在同一个session过程中在前面插入的数据,后面是可以看到的,但是只有commit以后才能提交到数据,你调试的时候必须下面的查询语句执行以后才能在临时变量tmp_chapter_id 中看到
      

  12.   

    上面写错了,不是session过程,是在一个事务过程中,不好意思
      

  13.   

    实测数据:CREATE TABLE T152
    (
        ID NUMBER(2),
        MyDesc VARCHAR2(20)
    );
    存储过程:CREATE OR REPLACE PROCEDURE ProcTest
    IS
        CURSOR vCur IS SELECT * FROM T152;
        vRecord T152%ROWTYPE;
    BEGIN
        INSERT INTO T152 VALUES(1, 'A');
        INSERT INTO T152 VALUES(2, 'B');
        
        FOR r IN vCur LOOP
            DBMS_OUTPUT.PUT_LINE('[' || r.id || ', ' || r.MyDesc || ']');                
        END LOOP;
    END ProcTest;
    测试脚本:begin
      -- Call the procedure
      proctest;
    end;
    结果:可以找到数据。
      

  14.   

    同一事务里,你insert 数据到表里不用commit 是可以看到插入表里的数据的。
    CREATE OR REPLACE PROCEDURE COPY_CHAPTER AS
    o_chapter_id varchar2(64);
    n_chapter_id varchar2(64);
    tmp_chapter_id varchar2(64);
    v_layer_type  chapterinfo.layer_type%type;
    CURSOR cursor_chapter IS
                SELECT chapter_id,layer_type FROM chapterinfo ;

                
    BEGIN       
    OPEN  cursor_chapter;
        LOOP
            FETCH cursor_chapter INTO o_chapter_id,v_layer_type;        EXIT WHEN cursor_chapter%NOTFOUND;  
            
          SELECT getsequence INTO  n_chapter_id FROM dual;  
             
          INSERT INTO chapterinfo
                   (chapter_id, parent_id, layer_type) 
            values (n_chapter_id,' ',v_layer_type)
            SELECT chapter_id INTO tmp_chapter_id FROM chapterinfo WHERE chapter_id = n_chapter_id;
        END LOOP;
    CLOSE cursor_chapter;     
           
    END ; ----
    PS:
    上面是我帮你修改的过程,我不知道你为什么要这样insert的,如果是业务逻辑需要你这样处理的话,我帮你改的还需要你自己用数据去测试。
    INSERT INTO chapterinfo
                   (chapter_id, parent_id, layer_type) 
            SELECT n_chapter_id,'', layer_type
            FROM chapterinfo 
            WHERE chapter_id = o_chapter_id;
      

  15.   

    补充,INSERT语句后面缺了个;
     INSERT INTO chapterinfo
    (chapter_id, parent_id, layer_type) 
    values (n_chapter_id,' ',v_layer_type);
      

  16.   

    问题找到了,是因为我表结构的问题 INSERT INTO chapterinfo
                   (chapter_id, parent_id, layer_type) 
            SELECT n_chapter_id,'', layer_type
            FROM chapterinfo 
            WHERE chapter_id = o_chapter_id;
    存储过程里定义的变量: o_chapter_id,也刚好是表的一个字段,就是这个问题导致了这个语句select的是空,也就没有插入到数据谢谢各位的回复,啦啦啦啦啦啦~~~~~~
      

  17.   

    其实我就是想复制一个树形结构,把原来的所有内容和层级都复制一遍,发觉最难复制的就是parent_id,不知道怎么能按顺序排序下来,现在就是先把结构复制了,parent_id为空,最后再根据o_chapter_id统一去update它。再次谢谢各位,尤其几位同学认真负责的回复,来,各亲一个~~~~~