Oracle 触发器在插入操作之前执行外部文件
Oracle trigger executing external file before insert operation
我创建了通过 DBMS_SCHEDULER.RUN_JOB()
执行外部 python 文件的 Oracle 触发器,但它首先执行 python 文件,然后将行插入 table.I 想要完全相反的操作。
CREATE OR REPLACE TRIGGER sample
AFTER INSERT ON client
BEGIN
EXEC DBMS_SCHEDULER.RUN_JOB("JOB CONTAN PYTHON FILE");
END;
告诉我正确的方法
你怎么知道的?
想想!
- 你有一个table
- 上面有一个触发器 table
- 当您将数据插入 table 和 ...
时触发
- ...调用 Python 脚本
那么,如果恰恰是该操作(插入行)触发并 运行 在 运行 插入行之前 Python 脚本?
除非你证明我错了,否则一切都应该没问题。
插入 table 的行与其他会话可见的行之间存在差异。在提交数据之前,任何其他事务都看不到那些插入的行。如果您的 python 代码尝试连接到数据库以查看这些行,它不会看到它们。
同样,在触发器完成之前,您的事务无法向客户端(在您的情况下 SQL 开发人员)报告插入成功。在这种情况下,它需要等到 python 调用完成后再返回。
通常认为触发器 'bad practice',尽管它们确实有一些很好的应用。让会话等待外部任务也是要避免的事情。我建议您重新考虑您要实现的目标的方法。
我创建了通过 DBMS_SCHEDULER.RUN_JOB()
执行外部 python 文件的 Oracle 触发器,但它首先执行 python 文件,然后将行插入 table.I 想要完全相反的操作。
CREATE OR REPLACE TRIGGER sample
AFTER INSERT ON client
BEGIN
EXEC DBMS_SCHEDULER.RUN_JOB("JOB CONTAN PYTHON FILE");
END;
告诉我正确的方法
你怎么知道的?
想想!
- 你有一个table
- 上面有一个触发器 table
- 当您将数据插入 table 和 ... 时触发
- ...调用 Python 脚本
那么,如果恰恰是该操作(插入行)触发并 运行 在 运行 插入行之前 Python 脚本?
除非你证明我错了,否则一切都应该没问题。
插入 table 的行与其他会话可见的行之间存在差异。在提交数据之前,任何其他事务都看不到那些插入的行。如果您的 python 代码尝试连接到数据库以查看这些行,它不会看到它们。
同样,在触发器完成之前,您的事务无法向客户端(在您的情况下 SQL 开发人员)报告插入成功。在这种情况下,它需要等到 python 调用完成后再返回。
通常认为触发器 'bad practice',尽管它们确实有一些很好的应用。让会话等待外部任务也是要避免的事情。我建议您重新考虑您要实现的目标的方法。