如何解决php oci:插入 问题可能的解决方案还有其他方法可以做到这一点吗?
所以我的情况是:
我有 2 张桌子:
- TABLE_A
- TABLE_B
我将 oci_execute 与 OCI_NO_AUTO_COMMIT 一起使用,因此如果稍后插入失败,则插入根本不会发生。如果一切都成功运行,我会在最后提交;
问题
我在 TABLE_A 上运行了一个插入操作,它返回我想在之后立即使用的插入行 ID。 但由于它尚未提交,我收到了外键违规错误。
可能的解决方案
- 我想做一个预先编写的 PL/sql 脚本,但我可能会运行多个插入,所以我最终会替换字符串并连接多个插入字符串,而不是正确绑定变量。
- 我什至想过插入行并在出现问题时删除,但这听起来很糟糕,我宁愿进行字符串查询操作。
- 也许 TABLE_A 应该有一个没有使用的 0 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有关,那我恐怕帮不上忙了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。