亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

插入時出現 ORA-04043

插入時出現 ORA-04043

開心每一天1111 2023-08-23 17:19:06
我們正在嘗試存儲一條記錄:DSLContext dsl = DSL.using(conn, SQLDialect.ORACLE12C);KampartikelRecord kampartikelRecord = dsl.newRecord(KAMPARTIKEL);kampartikelRecord.setKampagne(387);kampartikelRecord.setArtnr("090248");kampartikelRecord.setArtId(5558);kampartikelRecord.store();但我們得到:org.jooq.exception.DataAccessException: SQL [insert into "TOSCA"."KAMPARTIKEL" ("KAMPAGNE", "ART_ID", "ARTNR") values (?, ?, ?)]; ORA-04043: Objekt "TOSCA" ist nicht vorhanden    at org.jooq_3.12.1.ORACLE12C.debug(Unknown Source)    at org.jooq.impl.Tools.translate(Tools.java:2717)    at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:755)    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:383)    at org.jooq.impl.TableRecordImpl.storeInsert0(TableRecordImpl.java:206)    at org.jooq.impl.TableRecordImpl$1.operate(TableRecordImpl.java:177)    at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:130)    at org.jooq.impl.TableRecordImpl.storeInsert(TableRecordImpl.java:173)    at org.jooq.impl.UpdatableRecordImpl.store0(UpdatableRecordImpl.java:196)    at org.jooq.impl.UpdatableRecordImpl$1.operate(UpdatableRecordImpl.java:136)    at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:130)    at org.jooq.impl.UpdatableRecordImpl.store(UpdatableRecordImpl.java:132)    at org.jooq.impl.UpdatableRecordImpl.store(UpdatableRecordImpl.java:124)    at ch.tosca.common.repository.JooqRepositoryTest.insertKampartikel(JooqRepositoryTest.java:66)    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   ... 48 more我讀過有關驅動程序不兼容的 GitHub 問題,但數據庫和驅動程序 ojdbc8 都是版本 12.2.0.1.0我們做錯了什么?
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

以下是使用普通 JDBC 重現它的方法:

如何重現它

使用此表

CREATE TABLE T (

? ID NUMBER(7),

? CONSTRAINT pk PRIMARY KEY (ID)

);

在內部使用Connection.prepareStatement(String, String[])重載,例如 jOOQ 所做的:


try (Connection c = dbSetup.getConnection()) {

? ? try (PreparedStatement s = c.prepareStatement(

? ? ? ? "insert into \"TEST\".\"T\" (\"ID\") values (?)", new String[] { "ID" })) {

? ? ? ? s.setInt(1, 1);

? ? ? ? s.execute ();

? ? }

}

解決方法

不要引用架構名稱:


try (Connection c = dbSetup.getConnection()) {

? ? try (PreparedStatement s = c.prepareStatement(

? ? ? ? "insert into TEST.\"T\" (\"ID\") values (?)", new String[] { "ID" })) {

? ? ? ? s.setInt(1, 1);

? ? ? ? s.execute ();

? ? }

}

完全避免資格:


try (Connection c = dbSetup.getConnection()) {

? ? try (PreparedStatement s = c.prepareStatement(

? ? ? ? "insert into \"T\" (\"ID\") values (?)", new String[] { "ID" })) {

? ? ? ? s.setInt(1, 1);

? ? ? ? s.execute ();

? ? }

}

使用 jOOQ 中的解決方法:

  • 您可以使用關閉模式限定Settings.renderSchema

  • 您可以使用關閉標識符的引用Settings.renderQuotedNames

查看完整回答
反對 回復 2023-08-23
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號