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程序...
  • qiuzhuoxian
  • qiuzhuoxian
  • 2010年06月19日 09:58
  • 14540

用PL/SQL Developer创建Oracle触发器以及触发器的一点点知识与出现的问题

本文将介绍如何使用PL/SQL Developer快速的创建一个触发器,应该明确的是鼠标的所有操作都是可以用代码实现的...
  • asdsa108
  • asdsa108
  • 2016年01月19日 09:10
  • 2571

PL/Sql Dev调试Oracle存储过程、触发器、函数

PL/Sql Dev调试Oracle存储过程、触发器、函数 本处以调试函数为例,其他的调试与此相同   1.调试位置   通常情况下,要在pl/sql Dev中调试程序有两个地方: ...
  • haiross
  • haiross
  • 2014年06月25日 15:48
  • 1260

PL/Sql 调试 Oracle 触发器

右键点击要调试的触发器,选择编辑,在行号位置上点击一下设置断点。(如果看不清图片,可以点击图片查看图片) 在菜单的新建中选择“测试窗口”,打开一个如下块,在begin和end中间添加能触发触发器的语...
  • jiutianhe
  • jiutianhe
  • 2013年12月10日 10:41
  • 1292

ORACLE之建表、建序列、建触发器SQL语句

今天在生产上准备把新表加入到库中,运维在建表等反面给了一些案例和建议和大家共勉 1 标准TIGGER写法参考如下 CREATE OR REPLACE TRIGGER "QRPAY"....
  • chenpeng19910926
  • chenpeng19910926
  • 2017年02月23日 15:35
  • 667

Oracle创建触发器详解及例子

触发器详解 1。触发器与触发该触发器的SQL语句同属于一个事务,触发器不允许发出任何事务控制语句,如 commit、rollback、savepoint或者set transaction,它只能随着...
  • qq_26676207
  • qq_26676207
  • 2016年07月01日 15:52
  • 5997

Oracle触发器和MySQL触发器之间的区别

Oracle触发器格式: CREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDATE|DELETE ON table...
  • a19881029
  • a19881029
  • 2014年07月16日 16:31
  • 3836

Oracle 中序列(sequence)和触发器(trigger)的使用

在开始正题前,先加一点关于 oracle client sqlplus 的使用,就是如果执行多行语句的话一定要加 “/” 才能表示结束并执行。 本次的目的是通过创建序列和触发器实现表的主键自增。...
  • iw1210
  • iw1210
  • 2013年03月13日 10:01
  • 2986

oracle冒号问题联系触发器中new和old的冒号问题':'

oracle冒号问题联系触发器中new和old的冒号问题':' 分类: oracle2012-04-08 22:45 2773人阅读 评论(0) 收藏 举报 oraclesqlinsert数据...
  • evilcry2012
  • evilcry2012
  • 2015年05月19日 15:41
  • 1219

创建触发器报PL/SQL: ORA-00942: 表或视图不存在

SQL> create user u1 identified by u1; 用户已创建。 SQL> grant dba to prod; 授权成功。 SQL> grant dba to u1;...
  • weiwangsisoftstone
  • weiwangsisoftstone
  • 2014年11月04日 09:43
  • 4643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE触发器+PL/SQL调用JAVA方法
举报原因:
原因补充:

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