本帖最后由 whiteprincer 于 2011-05-16 19:22:51 编辑

解决方案 »

  1.   

    1、没有group by name分组,你能select name ?
    2、存储过程中也不提交?
      

  2.   


    create or replace procedure prc_test
    as
    begin
     insert into table_AB select sysdate ,m,n 
        from
          (select count(1) m,66 name from table_A)a
        left join
          (select count(1) n ,66 name from table_B )b
        on a.name=b.name;
      commit;--在过程中添加数据一般要commit
      exception
      when others then
           rollback;--如果遇到异常,回滚操作
    end prc_test;
      

  3.   

    [Quote=引用 1 楼 tangren 的回复:]
    1、没有group by name分组,你能select name ?
    2、存储过程中也不提交?name 是66的别名,不需要group的~
    另外,不commit我确实看到插入新表数据了,而且还是0和1。
      

  4.   


    谢谢!我会试试的。不过现在是这样的,我把insert 语句放在varchar2变量中,
    varchar2(200) v_sql;
    v_sql='insert语句';
    --然后
    execute immediate v_sql;
    任然未解决上述问题
      

  5.   

    count()函数需要和group by一起使用的,另外不知道下面的能不能满足楼主的要求create or replace procedure prc_test
    as
    begin insert into table_AB select sysdate ,m,n 
        from
          (select row_number()over(order by name) m,66 name from table_A)a
        left join
          (select row_number()over(order by name) n ,66 name from table_B )b
        on a.name=b.name;end prc_test;
      

  6.   

    手动执行存储过程时,可以不需要commit;
    但是job时,必须要commit;
      

  7.   


    create or replace procedure prc_test
    as
    begininsert into table_AB 
    select sysdate ,
    (select count(*) from table_A),
    (select count(*) from table_B)
     from dual;
    commit;end prc_test;
      

  8.   

    我试试。另外,不commit时,插入数据为什么是0和1呢?
      

  9.   

    会不会是你的job的执行者与你手工执行的用户不是同一个user,使得指向的表实际上是不同的?