簡體   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