Server-side programming: pl/sql and java
Plsql是服务器端,存储过程语言。
Stored procedure -> SGA -> PL/SQL Engine -> SQL statement executor
数据库将编译后的程序装载到SGA的shared pool中,然后PL/SQL 和SQL执行器处理。
ORACLE JVM是嵌在oracle数据库中的,和典型的client JVM不一样。Oracle JVM为java的运行提供了环境,支持java数据类型,方法调用,异常处理等,也支持所有java核心库。
触发器:
行触发器
语句触发器
Instead of 触发器
事件触发器:系统事件,用户事件
触发器时间点:
Before statement
Before each row affected by statement
After each row affected by statement
After statement
CREATE OR REPLACE TRIGGER tr_sec_emp
BEFORE INSERT OR UPDATE OR DELETE ON emp
BEGIN
xxx;
CASE
WHEN INSERTING THEN
xx;
WHEN UPDATING THEN
xx;
WHEN DELETING THEN
xx;
END CASE;
END;
行触发:
CREATE OR REPLACE TRIGGER tr_emp_sal
BEFORE UPDATE OF sal ON emp
FOR EACH ROW
WHEN (old.job='SALESMAN')
BEGIN
xxx;
END;
DML触发器可以用来控制数据安全,实现数据审计,实现数据完整性,实现参照完整性(级联删除可以用ON DELETE CASCADE,级联更新可以用触发器)。
INSTEAD OF触发器:通过使用instead of trigger, 来实现对视图的DML操作.
1.只用于视图
2.不能指定before, after选项
3.不能在具有WITH CHECK OPTION的视图上建立
4.必须包含FOR EACH ROW
系统事件触发器
CREATE OR REPLACE TRIGGER tr_startup
AFTER STARTUP ON DATABASE
BEGIN
INSERT INTO event_table VALUES(ora_sysevent, SYSDATE);
END;
客户事件触发器:
CREATE OR REPLACE TRIGGER tr_logon
AFTER LOGON ON DATABASE
BEGIN
XXX;
END;
/
CREATE OR REPLACE TRIGGER tr_ddl
AFTER DDL ON scott.schema
BEGIN
XXX;
END;
/
对触发器的权限控制是通过该用户是否有权限执行触发动作的语句来实现的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11903161/viewspace-681514/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11903161/viewspace-681514/