设为首页 加入收藏

TOP

Oracle之Trigger学习(三)
2014-11-24 08:06:45 来源: 作者: 【 】 浏览:4
Tags:Oracle Trigger 学习
ary NUMBER(16,2),

Action VARCHAR2(20)

);

create table tr_emp2

(

empno number(4),

ename varchar2(50),

sal number(16,2),

deptno number(2)

)

create or replace trigger log_emp_update

for update of sal on tr_emp2

compound trigger

type t_number is table of number(16, 2) index by pls_integer;

type t_integer is table of integer index by pls_integer;

v_sal t_number;

v_empno t_integer;

BEFORE STATEMENT IS

BEGIN

DBMS_OUTPUT.PUT_LINE('begin working');

END BEFORE STATEMENT;

BEFORE EACH ROW IS

BEGIN

v_empno(v_empno.count + 1) := :NEW.empno;

--do not working

-- v_sal(v_sal.count + 1) :=:NEW.sal;

--dbms_output.put_line('hhhhh'||:NEW.sal);

END BEFORE EACH ROW;

AFTER EACH ROW IS

BEGIN

v_sal(v_sal.count + 1) := :NEW.sal;

dbms_output.put_line('hhhhh'||:NEW.sal);

END AFTER EACH ROW;

AFTER STATEMENT IS

BEGIN

forall i in 1 .. v_sal.count

insert into tr_emp_log(emp_id, log_date,new_salary, action)

values(v_empno(i), sysdate, v_sal(i), 'new sal');

END AFTER STATEMENT;

END;

UPDATE tr_emp2 SET Sal = Sal + 1000.0

WHERE Deptno =20;

Select * from tr_emp_log

EMP_ID

LOG_DATE

NEW_SALARY

ACTION

7369

2008-08-28 20:17:07

new sal

7566

2008-08-28 20:17:07

new sal

7788

2008-08-28 20:17:07

new sal

7902

2008-08-28 20:17:07

new sal

7876

2008-08-28 20:17:07

new sal

7369

2008-08-28 20:20:57

6800.00

new sal

7566

2008-08-28 20:20:57

8975.00

new sal

7788

2008-08-28 20:20:57

9000.00

new sal

7902

2008-08-28 20:20:57

9000.00

new sal

7876

2008-08-28 20:20:57

7100.00

new sal

Detecting the DML Operation that Fired a Trigger

IF INSERTING THEN... END IF;

IF UPDATING THEN ...END IF;

CREATE OR REPLACETRIGGER ...

... UPDATE OF Sal,Comm ON emp ...

BEGIN

... IF UPDATING('SAL') THEN ... END IF;

END;

Java Trigger

create or replace and compile java source named JT as

importjava.sql.*;

importjava.io.*;

importoracle.sql.*;

importoracle.oracore.*;

public class JavaTriggers

{

public static void beforeDelete(NUMBER old_id, CHAR old_name)

{

Connection conn = JDBCConnection.defaultConnection();

Statement stmt = conn.CreateStatement();

String sql = "insert into logtab values(" + old_id.intValue() + ", " +old_ename.toString() + ", BEFORE DELETE)";

stmt.executeUpdate (sql);

stmt.close();

//return;

}

}

CREATE OR REPLACE PROCEDUREBefore_delete (Id IN NUMBER, Ename VARCHAR2)

IS language Java

name JavaTriggers.beforeDelete (oracle.sql.NUMBER,oracle.sql.CHAR)';

CREATE OR REPLACETRIGGER Pre_del_trigger BEFORE DELETE ON Tab

FOR EACH ROW

CALL Before_delete(:old.Id, :old.Ename)

原创文章,如果转载,请标注作者:田文 CSDN地址:http://blog.csdn.net/tiwen818

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle知识点简介 下一篇oracle查看表、字段明细以及注释

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)