繁体   English   中英

在ORACLE中使用JDBC进行全部插入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM