【问题标题】:oracle commit killsoracle commit 杀死
【发布时间】:2010-12-24 10:36:00
【问题描述】:

我有一个oracle db 10g,这里以表为例

create table Dienstplan
(
Montag Number(2),
Dienstag Number(2),
Mittwoch Number (2),
Donnerstag Number (2),
Freitag Number (2),
Samstag Number (2),
Sonntag Number (2),
gueltigAb DATE default SYSDATE NOT NULL,
PersonalNr Number(10) references Mitarbeiter(PersonalNr) INITIALLY DEFERRED DEFERRABLE,
PRIMARY KEY (PersonalNr, gueltigAb),
check (Montag <= 24),
check (Dienstag <= 24),
check (Mittwoch <= 24),
check (Donnerstag <= 24),
check (Freitag <= 24),
check (Samstag <= 24),
check (Sonntag <= 24)
);
/

现在的问题是,每当我插入一个包含外键的行(不是此表独有的)(引用是有效的,所以不是那个)时,它就会尽职地插入,一旦我提交了整个混乱,它就会再次消失.

INSERT INTO Dienstplan (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag,   Sonntag, PersonalNr) values ('1', '2','3','4','5','6','7','1');

真正的问题是 sqldeveloper 中的手动插入(插入行 - 对话框和提交)就像一个魅力,这对我一点帮助都没有......

感谢任何帮助 欢呼恶作剧

【问题讨论】:

  • 您使用什么前端/API/什么来执行失败的插入和提交?
  • 我敢打赌,由于某种原因,尽管您不这么认为,但您会插入一个不存在的 PersonalNr,并且由于约束被延迟,因此在您提交之前不会出现错误。

标签: oracle insert commit oracle-sqldeveloper


【解决方案1】:

确保您没有从插入或提交中隐藏任何异常。 (由于 FK 约束被延迟,您将在 FK 违规的提交中获得异常。)

作为更一般的调试建议,我会说使用SQL Trace,这样您就可以准确地看到正在发生的事情。

【讨论】:

  • 我敢打赌提交会引发异常,但应用程序语言并不期望它。
【解决方案2】:

我的猜测是您的 UI 没有正确处理异常,并且由于某种原因插入失败,但您没有被告知。

【讨论】:

    【解决方案3】:

    另一个想法:

    如果您认为 IDE 正在屏蔽/隐藏/未显示正确的异常,为什么不将插入和提交添加到 Begin...End(匿名 PL/SQL 块)并查看弹出的内容?更重要的是,异常块中的 dbms_output 也可以解决问题。

    但是上面提到的 SQL 跟踪肯定会告诉你幕后发生了什么,据我所知,SQL 跟踪只适用于 PL/SQL 语句,如果这是正确的,你必须把插入并在 PL/SQL 块中提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2014-11-13
      • 2012-01-03
      • 2016-01-24
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多