Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Oracle触发器在插入操作之前执行外部文件_Python 3.x_Oracle_Oracle11g_Oracle Sqldeveloper_Database Trigger - Fatal编程技术网

Python 3.x Oracle触发器在插入操作之前执行外部文件

Python 3.x Oracle触发器在插入操作之前执行外部文件,python-3.x,oracle,oracle11g,oracle-sqldeveloper,database-trigger,Python 3.x,Oracle,Oracle11g,Oracle Sqldeveloper,Database Trigger,我已经创建了Oracle触发器,它通过DBMS\u调度程序执行外部python文件。运行\u JOB(),但它先执行python文件,然后将行插入表中。我想要完全相反的操作 CREATE OR REPLACE TRIGGER sample AFTER INSERT ON client BEGIN EXEC DBMS_SCHEDULER.RUN_JOB("JOB CONTAN PYTHON FILE"); END; 告诉我正确的方法你怎么知道的 想想看 你有桌子吗 那张桌子上有个扳机

我已经创建了Oracle触发器,它通过
DBMS\u调度程序执行外部python文件。运行\u JOB()
,但它先执行python文件,然后将行插入表中。我想要完全相反的操作

CREATE OR REPLACE TRIGGER sample
AFTER INSERT ON client

BEGIN

  EXEC DBMS_SCHEDULER.RUN_JOB("JOB CONTAN PYTHON FILE");

END;
告诉我正确的方法你怎么知道的

想想看

  • 你有桌子吗
  • 那张桌子上有个扳机
  • 将数据插入表并
  • 。。。调用Python脚本
那么,如果该操作(插入的一行)触发并运行Python脚本,那么该脚本如何在插入行之前运行呢


除非您证明我错了,否则一切都应该正常。

插入表中的行与其他会话可见的行之间存在差异。在提交数据之前,任何其他事务都无法看到插入的行。如果您的python代码试图连接到数据库以查看这些行,它将看不到它们

同样,在触发器完成之前,您的事务不能向客户机(在您的示例中是SQL开发人员)报告插入成功。在这种情况下,它需要等到python调用完成后再返回


一般来说,触发器被认为是“坏习惯”,尽管它们确实有一些好的应用。在外部任务上进行会话等待也是需要避免的。我建议你重新考虑一下你想要实现的目标

我正在使用OracleSQLDeveloper,并通过GUI将值直接插入到表中。但当我单击提交按钮时,它会启动触发器执行python脚本,如果该脚本得到执行,则会显示已提交的插入操作。若python脚本继续运行,Oracle将不会在表中插入并反映结果。我想创建一个应用程序,在每次插入后都会产生结果。我已经准备好python脚本,但哪种方法合适。请帮助我