[英]Doing an INSERT ALL using JDBC in ORACLE
我正在使用Oracle Database 12c企业版
我想使用JDBC将记录插入到2个表中,例如TABLE1和TABLE2。 这两个表具有基于公共列ID_COLUMN的主键和外键关系
我计划使用以下单个查询,并通过JDBC通过我的Java应用程序将其触发:
insert all
into TABLE1 (ID_COLUMN,COL2,COL3,COL4,COL5,COL6) values(?,?,?,?,?,?)
into TABLE2 (COL1_1,COL_1_2,COL_1_3,ID_COLUMN) values('blah',42,'rubbish',
select test_ctrl.seq_test_id.nextval FROM dual)
select * from dual;
我的基本要求是,我需要使用当前会话中TABLE1的最新ID_COLUMN插入TABLE2。 我知道INSERT ALL语句中的select test_ctrl.seq_test_id.nextval FROM dual
的用法不正确。 但是它是Oracle,我不能使用SCOPE_IDENTITY()
请提出如何使此查询有效
“但是作为Oracle,我不能使用SCOPE_IDENTITY()”
啊,但是可以。 在Oracle 12c中,他们引入了标识列:这是虚拟列的特殊变体。
create table my_table (
id number generated always as identity
....
, constraint my_table_pk primary key (id)
我似乎已经找到了问题的答案。像这样修改查询。请注意edme_ctrl.seq_ts_annotation_id.nextval和edme_ctrl.seq_ts_annotation_id.currval
INSERT ALL INTO "SPI7CG_CgNvI".X$ANNOTATIONS(ANNOTATION_ID,CATEGORY,REASON,COMMENTS,AUTHOR,ADJUSTMENT_TYPE,ADJUSTMENT_VALUE) VALUES (edme_ctrl.seq_ts_annotation_id.nextval, '51','33','Test Bulk Insert','kshiam','A',10) INTO "SPI7CG_CgNvI".X$DATA_ANNOTATIONS(ANNOTATION_ID, TABLE_NAME, TABLE_ROW_ID,COLUMN_NAME) VALUES (edme_ctrl.seq_ts_annotation_id.currval,'W$XXXXXGNVBSNSSNDCTRSSR007',164921155,'IVXXXXXGNVBXWGSQDTWQRTR0003') select * from dual
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.