【问题标题】:call sql scripts from a trigger从触发器调用 sql 脚本
【发布时间】:2015-01-25 02:42:40
【问题描述】:

我在 Windows 8 的 11g 上使用 Oracle Data Miner。我想创建一个触发器,它会在执行时实例化一些 sql 脚本(即,每当我尝试插入或更新记录时) 因此触发器将调用一些 sql 脚本。这样做的全部目的是在我在表中添加元组时执行一些过程。我无法获得正确的语法。 我尝试使用

create or replace trigger startClassification
after insert or update on comorbidity_scores
for each row
begin
@"C:\path\to\script\workflow_drop.sql";
@"C:\path\to\script\workflow_run.sql";
end;

但它不起作用。 正确的语法是什么?

【问题讨论】:

  • 什么不起作用?
  • 您知道这些脚本必须在运行 Oracle 的 服务器 上吗? Plus @ 是 SQL*Plus 命令,不能在 PL/SQL(甚至 SQL)中使用它
  • 有趣的东西,那个 XY 问题。所以,问题是:海报试图解决什么问题?他或她不知道 Oracle 不喜欢外部代码。数据库外部,显然包括它运行的文件系统。 -
  • 我最终发现编写触发器和调度数据库查询将是完全不同的任务。是的,原来是XY问题。感谢您的帮助!

标签: oracle sqlplus triggers


【解决方案1】:

使用UTL_FILE 使用SQL 脚本读取文件并使用DBMS_JOB 执行它(如果脚本中只有一条语句,则使用EXECUTE IMMEDIETE

请注意,这是一个非常严重的后门(任何拥有写入权限的人都可以在您的数据库中运行查询!)。

【讨论】:

    【解决方案2】:

    解决了。 问题是当我在参与 Oracle Data Miner 中的工作流系统的数据库中添加记录时启动一些过程(此处为数据挖掘过程)。 我在 PL/SQL 过程中使用了 DBMS_CHANGE_NOTIFICATION 和 DBMS_SCHEDULER。 另一方面,TRIGGERS 是我独立编写的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2022-11-09
      相关资源
      最近更新 更多