【问题标题】:call php script from oracle trigger从 oracle 触发器调用 php 脚本
【发布时间】:2010-10-13 21:44:55
【问题描述】:
问题如下:插入行后我有一个 oracle 触发器。从触发器中,我想调用一个 php 脚本并将刚刚插入的行字段作为参数传递。
插入来自非常古老的遗留应用程序,很少有机会查看源代码。行被频繁插入,可能是一次约 1000 行的批次,也可能是 30 分钟内的一行,因此不能每隔 5 秒检查一次此表。
那么,想法是要有oracle触发器,每次插入时都会触发并调用我的php脚本?有什么想法吗?
提前谢谢...
【问题讨论】:
标签:
php
oracle
triggers
call
【解决方案1】:
当您说“php 脚本”时,您的字面意思是命令行脚本,还是通过 apache/etc 运行的一段 php。
如果是前者,那就选择 OMG Ponies。否则我会使用UTL_HTTP 来调用Apache/PHP。实际上,我可能会考虑使用这个(如果需要,更新你的 php/c#)。
请记住.. 触发器是事务性的...如果您绝对必须从触发器中调用,请注意您的触发器可能会运行多次(由于 query restart)并且可能完全回滚,从而导致您的外部(大概非事务性)php 调用现在无效。如果您的 php 无法处理这个问题,那么您的触发器可能会创建一个作业甚至是一条消息到 AQ 或其他东西中,这也会加快处理速度,您可能真的不希望您的插入等待外部网络调用.
【解决方案2】:
I want to call a php script when some row is inserted or updated in some table via oracle triggers . Currently I m using this but its not much of help.
CREATE OR REPLACE TRIGGER test_script
BEFORE INSERT OR UPDATE OR DELETE ON STATES
FOR EACH ROW
BEGIN
-- Flags are booleans and can be used in any branching construct.
CASE
WHEN INSERTING THEN
:'/! echo C:/wamp/bin/php/php5.3.5/php.exe C:/wamp/www/csv.php >> C:/wamp/www/log.txt'
WHEN UPDATING THEN
-- Include any code specific for when the trigger is fired from an UPDATE.
WHEN DELETING THEN
-- Include any code specific for when the trigger is fired from an DELETE.
END CASE;
END;
/