Oracle没有足够的值错误

时间:2016-04-05 08:57:15

标签: sql oracle

我想将一个表插入另一个表。区别在于另一个表中一列是自动增量,列名是SEQ_NO

我尝试使用以下查询,但是错误为

  

ORA-00947:值不够

请提示为什么查询会出错

3 个答案:

答案 0 :(得分:1)

您需要在插入中明确写出需要处理的每一列,不包括那些具有一些自动增量的列,默认值,...

然而,即使您不需要它,这也是一个好主意,因为它可以为您提供更多控制和更易读的代码:

insert into xxacl_pn_project_link_h(
                                    HISTSEQ_NO         ,
                                    HIST_DATE          ,
                                    MKEY               ,
                                    PROJECT_ID         ,
                                    PROJECT_NAME       ,
                                    DIRECT_BOOKING     ,
                                    NON_ORACLE_PROJECT ,
                                    ATTRIBUTE1         ,
                                    ATTRIBUTE2         ,
                                    ATTRIBUTE3         ,
                                    ATTRIBUTE4         ,
                                    ATTRIBUTE5         ,
                                    LAST_UPDATE_DATE   ,
                                    DELETE_FLAG        ,
                                    CREATION_DATE      ,
                                    CREATED_BY         ,
                                    LAST_UPDATE_LOGIN  
                                    )
select HISTSEQ_NO_sq.nextVal,/*HISTSEQ_NO        */ 
       sysdate              ,/*HIST_DATE         */
       MKEY                 ,/*MKEY              */
       PROJECT_ID           ,/*PROJECT_ID        */
       PROJECT_NAME         ,/*PROJECT_NAME      */
       DIRECT_BOOKING       ,/*DIRECT_BOOKING    */
       NON_ORACLE_PROJECT   ,/*NON_ORACLE_PROJECT*/
       ATTRIBUTE1           ,/*ATTRIBUTE1        */
       ATTRIBUTE2           ,/*ATTRIBUTE2        */
       ATTRIBUTE3           ,/*ATTRIBUTE3        */
       ATTRIBUTE4           ,/*ATTRIBUTE4        */
       ATTRIBUTE5           ,/*ATTRIBUTE5        */
       LAST_UPDATE_DATE     ,/*LAST_UPDATE_DATE  */
       DELETE_FLAG          ,/*DELETE_FLAG       */
       CREATION_DATE        ,/*CREATION_DATE     */
       CREATED_BY           ,/*CREATED_BY        */
       LAST_UPDATE_LOGIN     /*LAST_UPDATE_LOGIN */
FROM xxacl_pn_project_link l
 WHERE l.mkey = '1'

要处理您的HISTSEQ_NO字段,假设它没有自动增量逻辑,您可以使用序列:

create sequence HISTSEQ_NO_sq start with 1

答案 1 :(得分:0)

您错过了特定于历史记录的专栏HISTSEQ_NO的值。 很可能您想使用sequence来生成该ID /号码。

答案 2 :(得分:0)

指定列名称。并离开专栏HISTSEQ_NO。如果是auto increment,则会在插入时自动添加。

 INSERT INTO xxcus.xxacl_pn_project_link_h (
    HIST_DATE
    ,MKEY
    ,PROJECT_ID
    ,PROJECT_NAME
    ,DIRECT_BOOKING
    ,NON_ORACLE_PROJECT
    ,ATTRIBUTE1
    ,ATTRIBUTE2
    ,ATTRIBUTE3
    ,ATTRIBUTE4
    ,ATTRIBUTE5
    ,LAST_UPDATE_DATE
    ,DELETE_FLAG
    ,CREATION_DATE
    ,CREATED_BY
    ,LAST_UPDATE_LOGIN
    )
SELECT SYSDATE
    ,MKEY
    ,PROJECT_ID
    ,PROJECT_NAME
    ,DIRECT_BOOKING
    ,NON_ORACLE_PROJECT
    ,ATTRIBUTE1
    ,ATTRIBUTE2
    ,ATTRIBUTE3
    ,ATTRIBUTE4
    ,ATTRIBUTE5
    ,LAST_UPDATE_DATE
    ,DELETE_FLAG
    ,CREATION_DATE
    ,CREATED_BY
    ,LAST_UPDATE_LOGIN
FROM xxcus.xxacl_pn_project_link l
WHERE l.mkey = '1'