insert into A(i,j,k) 
SELECT i,j,1  from B WHERE ... 
union all
SELECT null,null,1  from B WHERE ... 【反条件】

解决方案 »

  1.   

    insert into A(i,j,k) select max(i),max(j),1 from b where .....这样一定会返回一条记录的。
      

  2.   

    TO :shuipipi(水皮皮)
        首先感谢你提供了在Insert的select子句中使用union 的思路   我试过你的方法,当B中没有任何行时,不会插入;
       当B中m条有满足条件的记录 时,如果还存在n行满足【反条件】的记录时,会插入m+n行
        即使将union all 改为union 也是这样
      

  3.   

    To iwantsay(吵闹):    我的实际问题就是单条新增,主要是为了用一些常数和另一个表的字段(如果存在)初始化一条记录,无论如何,这些常数必须插入到新的记录中去。
        
        你给的方法是正确的,非常感谢    条件是rownum=1,如果第二个表没有记录用union就对了,但是如果有,则会插入2条记录
      

  4.   

    另外,在请教一个问题,
    insert into A(i,j,k) 
    select C_SEQ.NEXTVAL,max(j),1 
    FROM B where B.rownum=1
    returning a.i into v_i;这个语句出现问题  PL/SQL: ORA-00933: SQL 命令行未正确结束
    如果不用select 而使用 insert ... values ... returning ... into 
    的形式就正确,这是怎么回事
      

  5.   

    你试一下用 max(a.i)吧。上面用了max(j)无法再得到a.i了。
      

  6.   

    好,结贴,再次感谢iwantsay(吵闹) 与 shuipipi(水皮皮)