php oci:插入所需的未提交外键

php oci: uncommitted foreign key needed for insert

所以我的情况是:

我有 2 个表:



我将 oci_execute 与 OCI_NO_AUTO_COMMIT 一起使用,因此如果稍后插入失败,则根本不会发生插入。如果每个 运行 都成功,我会在最后提交;

问题

我 运行 在 TABLE_A 上插入 returns 我想在之后立即使用的插入行 ID。 但由于尚未提交,我收到外键违规错误。

可能的解决方案

还有其他方法吗?

我不知道 PHP,但是 - 看看我的 Oracle 观点是否有帮助。

这是你现在拥有的:

SQL> create table table_a (id    number primary key);

Table created.

SQL> create table table_b (id    number primary key,
  2                        id_fk number references table_a
  3                       );

Table created.

SQL> insert into table_b values (1, 1);
insert into table_b values (1, 1)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C00105535) violated - parent key not
found

当然不行...table_a中没有父键。


但是,如果您更改外键约束,使其“忽略”所引用的键是否存在并在 COMMIT 点进行检查,则此 可能 成为您要找的人。

参见第 3 行和第 4 行:

SQL> drop table table_b;

Table dropped.

SQL> create table table_b (id    number primary key,
  2                        id_fk number constraint fk_ba references table_a
  3                                       initially deferred deferrable
  4                       );

Table created.

SQL> insert into table_b values (1, 1);

1 row created.

看到了吗?插入成功,尽管 table_a 中引用的主键尚不存在。

所以,一旦你输入它......

SQL> insert into table_a values (1);

1 row created.

...并提交...

SQL> commit;

Commit complete.

SQL>

...一切都在这里:

SQL> select * From table_a;

        ID
----------
         1

SQL> select * from table_b;

        ID      ID_FK
---------- ----------
         1          1

SQL>

如果问题与PHP有关,恐怕我帮不上忙了。