我想将一个表插入另一个表。区别在于另一个表中一列是自动增量,列名是SEQ_NO
我尝试使用以下查询,但是错误为
ORA-00947:值不够
请提示为什么查询会出错
答案 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'