insert into ac12(id,aab001,aac111,aac001,aac124,aac125) values((select SEQ_AC12_ID.nextval as "id",ac.aab001 as "aab001", 9 as "aac111", ac.aac001 as "aac001", '2010-05-05' as "aac124",'2010-10-10' as "aac125" from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9)));结果:ORA-00947: 没有足够的值 (select SEQ_AC12_ID.nextval as "id",ac.aab001 as "aab001", 9 as "aac111", ac.aac001 as "aac001", '2010-05-05' as "aac124",'2010-10-10' as "aac125" from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9))结果:        id aab001       aac111 aac001     aac124     aac125    
---------- -------- ---------- ---------- ---------- ----------
       137 00000001          9 0000004764 2010-05-05 2010-10-10
       138 00000001          9 0000004766 2010-05-05 2010-10-10
       139 00000001          9 0000004805 2010-05-05 2010-10-10
       140 00000001          9 0000011488 2010-05-05 2010-10-10
       141 00000001          9 0000011489 2010-05-05 2010-10-10
       142 00000001          9 0000011490 2010-05-05 2010-10-10
       143 00000001          9 0000011491 2010-05-05 2010-10-10
       144 00000001          9 0000011492 2010-05-05 2010-10-10
       145 00000001          9 0000011493 2010-05-05 2010-10-10
       146 00000001          9 0000011494 2010-05-05 2010-10-10
       147 00000001          9 0000011495 2010-05-05 2010-10-10
       148 00000001          9 0000011486 2010-05-05 2010-10-10
       149 00000001          9 0000011487 2010-05-05 2010-10-10
       150 00000001          9 0000011463 2010-05-05 2010-10-10
       151 00000001          9 0000011464 2010-05-05 2010-10-10
       152 00000001          9 0000011465 2010-05-05 2010-10-1016 rows selected.
这是为什么呢?  列数都是一样的啊

解决方案 »

  1.   


    insert into ac12(id,aab001,aac111,aac001,aac124,aac125) values(
    (select SEQ_AC12_ID.nextval as "id",ac.aab001 as "aab001", 9 as "aac111", ac.aac001 as "aac001", '2010-05-05' as "aac124",'2010-10-10' as "aac125" from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9)));
    -- Oracle 不支持这种写法,需要先将查询的结果插入到变量里,在把变量写道values里。 
    ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977(满)
    DBA3 群:63306533;     聊天 群:40132017
      

  2.   

    用存储过程来做吧,主要是你用了SEQ_AC12_ID.nextval  这样需要在PLSQL中作插入
      

  3.   

    什么意思,你把values去掉不就可以了吗?没看懂
      

  4.   


    最好用存储过程.  不用存储过程,就多弄几张表,将查询的结果简单化。 最后可用类似于以下的方法插入:
    insert into table as select * from table. 
      

  5.   


    insert into table select * from table.没有as 
      

  6.   

    试试这样行不?
    前提是你ac12只有(id,aab001,aac111,aac001,aac124,aac125)这六个字段
    insert into ac12 select SEQ_AC12_ID.nextval as "id",ac.aab001 as "aab001", 9 as "aac111", ac.aac001 as "aac001", '2010-05-05' as "aac124",'2010-10-10' as "aac125" from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9)
      

  7.   

    没看懂,这样不行吗?
    insert into ac12(id,aab001,aac111,aac001,aac124,aac125) 
    select SEQ_AC12_ID.nextval as "id",ac.aab001 as "aab001", 9 as "aac111", ac.aac001 as "aac001", '2010-05-05' as "aac124",'2010-10-10' as "aac125" from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9);后面SELECT中别名可以不要
      

  8.   

    通不过?报的什么错啊?
    你把所有的别名去掉看看(应该没关系的)
    难道是aac124字段类型是日期的?如果是,需要增加函数转换 TO_DATE('2010-05-05','YYYY-MM-DD')
    insert into ac12(id,aab001,aac111,aac001,aac124,aac125)
    select SEQ_AC12_ID.nextval ,ac.aab001 , 9 , ac.aac001 , '2010-05-05' ,'2010-10-10'
      from ac01 ac where ac.aac008 = 1 and ac.aac001 not in (select ac1.aac001 from ac12 ac1 where ac1.aac111 = 9);
      

  9.   


    INSERT INTO ac12(id,aab001,aac111,aac001,aac124,aac125) SELECTSEQ_AC12_ID.nextval as "id",
    ac.aab001 as "aab001", 
    9 as "aac111", 
    ac.aac001 as "aac001", 
    '2010-05-05' as "aac124",
    '2010-10-10' as "aac125" FROM ac01 ac 
                 WHERE 
                 ac.aac008 = 1 and 
                 ac.aac001 NOT IN  (SELECT ac1.aac001 FROM ac12 ac1 WHERE ac1.aac111 = 9)
      

  10.   

    正确语法:INSERT INTO ac12
                (ID, aab001, aac111, aac001, aac124, aac125)
       SELECT seq_ac12_id.NEXTVAL AS ID, ac.aab001 AS aab001, 9 AS aac111,
              ac.aac001 AS aac001, TO_DATE ('2010-08-08', 'YYYY-MM-DD') AS aac124,
              TO_DATE ('2010-08-25', 'YYYY-MM-DD') AS aac125
         FROM ac01 ac
        WHERE c.aac008 = 1
          AND NOT EXISTS (SELECT *
                            FROM ac12 ac1
                           WHERE ac1.aac001 = ac.aac001 AND ac1.aac111 = '9')列类型需要转型