Isa*_*man 9 oracle foreign-key
使用 Oracle 的多表插入语句插入(外键约束)父子表是否安全?
通过最少的示例,我发现只要父表在into列表中的子表之前,它就可以工作。我可以依靠这个还是应该使约束可以延迟?
不,你不能依赖这个。SQL 是声明性的,而不是过程性的,因此在语句中您不能保证执行顺序。由于整个INSERT ALL语句被视为单个语句 ( doc ),因此您不能保证一个语句INSERT会在另一个语句之前。
根据定义,INSERT FIRST必须执行第一个INTO传递评估条件。我们可能期望INSERT ALL行为相似。这似乎是这样:
DROP TABLE T1;
CREATE TABLE T1 AS (SELECT 'a' c1, 0 c2, 0 c3 FROM dual WHERE 1=2);
INSERT ALL
WHEN mod(x,2)<>0 THEN INTO T1 VALUES ('a', x, mod(x,2))
WHEN mod(x,2)=0 THEN INTO T1 VALUES ('b', x, mod(x,2))
SELECT Level x FROM dual CONNECT BY Level <=20;
COMMIT;
SELECT rowid, c1, c2, c3 FROM t1;
Run Code Online (Sandbox Code Playgroud)
但是,即使我们可以在特定平台/版本/补丁集上演示特定行为,仍然不能保证这一点。
Oracle-developer.net明确表示:
INSERT FIRST 语句中的条件将按从上到下的顺序进行评估。Oracle 对 INSERT ALL 语句不做此类保证。
| 归档时间: |
|
| 查看次数: |
3751 次 |
| 最近记录: |