ORACLE触发器+PL/SQL调用JAVA方法

原创 2013年12月02日 15:26:35

案例一:当表sys_user新增、修改、删除时后,触发触发器记录操作状态。

第一步:创建更新记录表

create table user_update_log
    (
      id number(5) not null,
      username varchar(10),
      operation varchar(6),
      operatetime date,
      primary key(id)
    );

第二步:创建一个序列,在SQLplus控制台执行如下脚本

create sequence logsequence start with 1 maxvalue 999;

第三步:创建一个触发器,在SQLplus控制台执行如下脚本

create or replace trigger user_trigger
  after insert or update or delete on
sys_user    
  for each row
declare
  -- local variables here
  operation user_update_log.operation%TYPE;
begin
  if inserting then
    operation := 'insert';
  elsif updating then
    operation := 'update';
  elsif deleting then
    operation := 'delete';
  else
    operation := 'unknown';
  end if;
   -- dbms_output.put_line(operation);

   --:old.state获取就数据;new.state获取新数据;
   dbms_output.put_line(operation||'old='||:old.state||' new='||:new.state);
 
  insert into user_update_log   values    (logsequence.nextval, user, operation, sysdate);
  dbms_output.put_line('success');
end user_trigger;


第四步:测试

update sys_user a set a.state=0 where user_id=248;
update sys_user a set a.state=0 where user_id=258;

测试结果为:

updateold=0 new=1
success
updateold=0 new=1
success


案例二、当表sys_org_info新增、修改、删除时后,更新sys_user数据,函数调用java方法

第一步:在PL/SQL创建java类,更新用户表某记录值

create or replace and compile java source named orcjavademo as
import java.sql.*;
import oracle.jdbc.*;
public class OrcJavaDemo
{
  public static String entry(String hell)
  {
    System.out.println(hell);
    optOrc(hell);
    return hell+"=ok";
  }
  /*数据库操作*/  
  public static void optOrc(String hell){
     try {
         String driver = "oracle.jdbc.driver.OracleDriver";
         String strUrl = "jdbc:oracle:thin:@172.20.0.95:1521:ilmsddd";
         Connection conn =DriverManager.getConnection("jdbc:default:connection:");
        //Class.forName(driver);
         //conn = DriverManager.getConnection(strUrl, "atmsd", "atmsd");
         //String sql ="update sys_org_info set org_min_name=? where org_cd='001001' ";
         String sql="update sys_user set state=? where user_id=258";
         PreparedStatement pstmt = conn.prepareStatement(sql);
         pstmt.setInt(1,3);        
         pstmt.executeUpdate();
         pstmt.close();
         }
      catch(SQLException e) {
         System.err.println("ERROR! Adding Salgrade: " 
           + e.getMessage());
         }
     
  }
}

第二步:创建函数

CREATE OR REPLACE FUNCTION testFun(file in varchar2) return varchar2
AS LANGUAGE JAVA NAME 'OrcJavaDemo.entry(java.lang.String) return java.lang.String';


第三步:创建触发器

create or replace trigger sys_user_trigger
  after insert or update or delete on  sys_org_info
  for each row
  
declare
  -- local variables here  
   operation sys_org_info.org_name%type;
   opt1 varchar2(50);
  
   -- operation user_update_log.operation%TYPE;
begin
   if inserting then
    operation := 'insert';
  elsif updating then
    operation := 'update';
    opt1:='update';
  elsif deleting then
    operation := 'delete';
  else
    operation := 'unknown';
  end if;
    dbms_output.put_line(operation);   
    dbms_output.put_line('success');
    --optMethod(operation);
    dbms_output.put_line(testFun(opt1));      
end sys_user_trigger;


第四步:测试

update sys_org_info set org_name='a' where org_cd='001001';


输出结果为

update
success
updateold=2 new=3
success
update=ok







相关文章推荐

在ORACLE触发器里调用JAVA程序

因为项目需要,有一个已经写好的JAVA程序,想要在ORACLE某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据。现将过程记录如下:1。编写JAVA程序...

oracle触发器调用存储过程调用java类

虽然吭哧了半天这个方法也没用上,权当学习了吧

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

oracle触发器调用java程序

1、创建java程序:接收存储过程传递的参数,发送socket通信。 Java代码   create or replace and compile java source named jy...

Oracle数据库触发器如何调用Java程序实现Openfire消息推送

该教程需要实现Oracle调用Java程序向客户端消息,也可以学习触发器的使用,Oracle调用Java程序对用户授权命令。...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

oracle 更新后触发器(after update)

    oracle 触发器,我不太喜欢,因为以前的一个项目用的太多了,几乎每一个业务表都有触发器,后来维护这个项目时很费劲。    提醒一下:oracle 触发器更新表之后,这张表,就不能在你的触发...
  • rxopt
  • rxopt
  • 2011年04月09日 15:37
  • 12882

如何在Oracle中使用Java存储过程 (详解)

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。任何转载,请尊重版权。(作者:ii...
  • iihero
  • iihero
  • 2008年03月05日 12:46
  • 14797

oracle触发器调用java程序

1、创建java程序:接收存储过程传递的参数,发送socket通信。 Java代码   create or replace and compile java source named jy...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE触发器+PL/SQL调用JAVA方法
举报原因:
原因补充:

(最多只允许输入30个字)