Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle触发器查询 让我们考虑一个表螺柱,一个行级触发器是通过插入查询实现的。我的场景是这样的,每当插入一行时,就会触发一个触发器,它应该访问硬盘中的一些脚本文件,并最终打印结果。那么,这是可能的吗?如果是,那么这个东西应该以动态的形式存在,也就是说,如果我们更改脚本文件的内容,那么oracle也应该反映这些更改_Oracle_Triggers_External Process - Fatal编程技术网

Oracle触发器查询 让我们考虑一个表螺柱,一个行级触发器是通过插入查询实现的。我的场景是这样的,每当插入一行时,就会触发一个触发器,它应该访问硬盘中的一些脚本文件,并最终打印结果。那么,这是可能的吗?如果是,那么这个东西应该以动态的形式存在,也就是说,如果我们更改脚本文件的内容,那么oracle也应该反映这些更改

Oracle触发器查询 让我们考虑一个表螺柱,一个行级触发器是通过插入查询实现的。我的场景是这样的,每当插入一行时,就会触发一个触发器,它应该访问硬盘中的一些脚本文件,并最终打印结果。那么,这是可能的吗?如果是,那么这个东西应该以动态的形式存在,也就是说,如果我们更改脚本文件的内容,那么oracle也应该反映这些更改,oracle,triggers,external-process,Oracle,Triggers,External Process,我曾尝试使用外部过程为java实现这一点,但对我想要的结果不太满意 请给出您对这类场景的看法以及实现方法。社区维基,了解这是一个坏主意的原因 将文件用于动态代码是愚蠢的原因 插入的每一行都必须打开一个文件,读取整个内容,对其进行解析,并对结果进行“处理”。这将是缓慢的 根据操作系统环境的不同,您可能无法同时打开文件进行读写。因此,您可能会发现必须关闭数据库才能将代码更改“升级”到文件中 根据操作系统环境的不同,您甚至可能发现一次只能从文件中读取一个会话 > P>可能触发器将在“保存”的中间读取

我曾尝试使用外部过程为java实现这一点,但对我想要的结果不太满意


请给出您对这类场景的看法以及实现方法。

社区维基,了解这是一个坏主意的原因

将文件用于动态代码是愚蠢的原因

  • 插入的每一行都必须打开一个文件,读取整个内容,对其进行解析,并对结果进行“处理”。这将是缓慢的

  • 根据操作系统环境的不同,您可能无法同时打开文件进行读写。因此,您可能会发现必须关闭数据库才能将代码更改“升级”到文件中

  • 根据操作系统环境的不同,您甚至可能发现一次只能从文件中读取一个会话

  • > P>可能触发器将在“保存”的中间读取文件并执行部分代码。
  • 文件安全性将与数据库安全性完全分离,这将给维护带来麻烦

  • 简而言之,将动态代码存储在表中而不是文件中将是一个巨大的改进

    无论如何都不应使用动态代码的原因:

  • 尚未分析/编译动态代码。所以它可能不起作用,直到它被执行,你才会发现

  • 由于减少了解析开销,静态代码的性能优于动态代码

  • 杂项。理由

  • 让行级触发器读取并执行代码意味着,在表中插入多条记录的同一语句可能会选择不同版本的代码来执行不同的行插入 如果我想访问一个sh文件怎么办, 它正在做一些操作系统处理

    从数据库内部执行操作系统有三种方式

  • 外部过程,它是用C或Java编写的OS库的PL/SQL包装。从Oracle 8.0开始提供

  • 模拟主机命令的Java存储过程。这是Java
    运行时的手工包装。此命令将以
    oracle
    OS用户的强大权限执行,因此不要公开此过程供一般使用。相反,让安全用户拥有它,并编写存储过程以公开特定的操作系统功能(例如,执行
    mkdir
    的过程,执行
    ls
    的函数)。可能是因为Oracle 8i

  • DBMS_调度器。除了后台数据库作业之外,我们还可以使用调度数据库来运行操作系统作业。从Oracle 10g开始提供

  • 在这三个选项中,DBMS_调度程序可能是最安全的选项。顾名思义,它旨在定时运行程序(如unix
    cron
    ),因此不适合按需运行(比如通过触发器)。然而,您的业务逻辑可能可以在不需要触发器的情况下得到满足。外部过程不用于运行shell脚本

    外部程序是外部的,需要更多的努力来协调数据库组件。这适用于发布应用程序的新版本以及进行备份。当(比如)开发环境和活动环境位于不同的平台上时,它们也会很麻烦


    在中,强迫数据库执行任意代码是一个非常糟糕的主意。在大多数情况下,所需要的只是一种将参数传递给可执行文件的机制。

    这个问题确实令人困惑。是否要从平面文件脚本向Oracle数据库添加信息?这个决定的安全性和设计问题让我头晕目眩。让我们知道你真正想做什么,而不是描述你做了什么。这可能会有所帮助。好吧,每当在表中插入一行时,执行了行级触发器,然后触发一个触发器,它访问一个pl sql代码,该代码访问外部(即从硬盘)的脚本文件。我们可以通过普通的插入查询在数据库中添加信息,但插入后,触发,,这就是上面可能的行动。。可能是@JeffreyKemp的复制品-由于Gary和我都削弱并提供了答案,我建议我们投票结束另一个问题,而不是这个问题。