科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Oracle外部程序的触发小结

Oracle外部程序的触发小结

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在论坛里曾经看过一个帖子,有位用户问了这么一个问题:oracle 里一个表插入一条数据,提交后,如何让外部程序收到这个消息?当时没有留意,现在想想好像应该可以总结一下了

作者:changelive 来源:赛迪网技术社区 2007年9月3日

关键字: 程序 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件
在论坛里曾经看过一个帖子,有位用户问了这么一个问题:oracle 里一个表插入一条数据,提交后,如何让外部程序收到这个消息? i5TBf&O!@,  
  当时没有留意,现在想想好像应该可以总结一下了。举例: cZ E95}RL  
1、过程中: Fo92T3hp  
... 6P^mx1b"  
declare MM0vn|  
myexcept exception; LXXIFLX  
inserted_count1 number; QuCiiz:  
inserted_count2 number; ]'y[x7L;  
... +H/0:W2  
begin ;c#]vlQD  
insert into table values(...); /k*nt7g  
inserted_count1 := sql%rowcount; J's$qbj  
...                   --可以判断inserted_count1是否大于0来确定是否插入了数据 19-Zmg  
commit; V"s;o   
inserted_count2 := sql%rowcount; --这里inserted_count2为0 R!BzWM  
...         --事实上,这里一定是提交成功才会执行,否则会跳到exception段 owX0)e<O  
yourprocess(yourpara);--调用你自己的过程或语句跟别的过程通信 l^mN\L?X  
... Hh$y3  
exception OX>^vh(  
when others then   ---你可以根据sqlcode自己去查具体的提交失败原因 Lks!iDvB?  
... f&t\ xu(  
yourprocess_for_fail(yourpara)   --调用你自己的过程跟别的过程通信 =;u)Gt:Du  
... |gs)5w  
end; |,fmxA  
H1(kWU  
  2、直接外部操作,建触发器: DXlRDDrt  
create or replace trigger table after insert for each row ^p-Z CuCRM  
... [h7;ItY  
begin tER/ (W#  
... R|M,jF  
yourprocess(yourprara); z|;qX1Rz  
... He$N8d?  
end; $@v>  
   T3T=p  
  当然,2的方法这只能更总到提交前,如果要监视提交后状态,你可以在操作表建立标志位或专门建个表,操作表发生变化就通过trigger更新变化信息到状态表,扫描状态表就知道是否commit;成功了 wX/ '_yE  
T6%K {U2  
Jsvq7Leap  
hY_mD  
  我想这位用户应该通过trigger来调用java source来实现插入数据后来通知外部程序来做一些事情: 9ZCna0:"UU  
\ 8cC ~`  
  使用java source的例子如下: Mm0hVR  
Ds,Um4ix  
SQL> create or replace and compile java source named HelloWorld H#$Q,9C  
2 as 71N7]>XVo  
3 public class HelloWorld { Exe3E="<  
4 public static void db_run (){ CY1::|4;2  
5 System.out.println("Hello World"); [6AbGG>*  
6 } !%5;u0Y  
7 } .3{qmj&YI  
8 / y>7"G^QJ  
wc%ED!dnL  
Java created. O]~>aiG6  
[M83#K1T  
,+!qcq/n^  
SQL> create or replace procedure run_helloworld  a%r:K}'  
2 as language java uk!W"  
3 name 'HelloWorld.db_run()'; tC9H9]  
4 / c $L@N  
QD /X j ]  
Procedure created. 401`KaNl  
SQL> set serveroutput on size 5000 Bg_]YkP+  
SQL> call dbms_java.set_output(5000) ;  '996-y  
6"'c<7g*_3  
Call completed. $'8\p2*c:  
*@&;`5I  
SQL> tnyCb=x}cv  
SQL> exec run_helloworld ; %qyN}WeZe  
Hello World DC~"K4 FX  
e @coNDV<6  
PL/SQL procedure successfully completed.
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章