《oracle从入门到精通(PDF格式)》第33章


重新建立会话
符合规则
4。与开发相关的系统包:
DBMS_SQL
(1)能过生成动态的 SQL 语句;
(2)能过执行 DDL 语句;
包使用的主要步骤:
OPEN_DURSOR
PARSE
BIND_VARIABLE
EXECUTE
FETCH_ROWS
CLOSE_CURSOR
EXECUTE IMMEDIATE
EXECUTE IMMEDIATE dynamic_string
'INTO {define_variable
'; define_variable' 。。。 | record}'
'USING 'IN|OUT|IN OUT' bind_argument
'; 'IN|OUT|IN OUT' bind_argument' 。。。 ';
DBMS_DDL
ALTER_PILE(object_type;owner;object_name);强制编辑
DBMS_JOB
设置用户的任务;
在某个指定的时刻执行一定的操作;
手动强制执行;
挂起任务;
提交
删除
修改
要执行什么,可以跟语句或过程
下一次的执行时间
任务执行的时间间隔
挂起
手动强制执行
查看:
USER_JOBS;
DBMS_OUTPUT
PUT 输出多行数据
NEW_LINE 起一个新行
PUT_LINE 输出一行数据
GET_LINE 得到一行信息
GET_LINES 得到多行信息
UTL_FILE
对操作系统文件进行操作;
第 93 页,共 106 页 
…………………………………………………………Page 94……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
DBMS_LOB
对 LOB 对象的读和写
UTL_HTTP
可以把指定的网页的内容摘取下来
静态的 SQL语句的执行过程:
分析 PARSE
绑定 BIND
执行 EXECUTE
取操作 FETCH
用户可以通过 DML 语句对 LONG 类型的数据可以直接访问;
7、触发器
触发器:
不能直接调用,必须得事件触发,一般情况下是与对象、数据库和方案有关。
1。 数据库触发器
2。 应用触发器
当一个操作与另一个操作有密切关系的时候;
触发器不要太大,如果代码量大,要把触发器放到一个可执行的存储过程中;
不要在一个对象上建立太多的触发器;
3。 表触发器
BEFORE 做数据校验
AFTER 在操作以后对操作和数据进行记录
4。 视图触发器
INSTEAD OF 对视图的操作替换成对视图的基表的操作
5。 行级触发器
对多行的操作,每操作一行都会触发触发器。
6。 语句级触发器
当一条语句执行的时候触发,执行一次触发一次,与操作的行数无关。
WHEN CLAUSE 触发器执行条件
1。语句级:
CREATE 'OR REPLACE' TRIGGER trigger_name
timing(before/after)
event1 'or event2 or event3' ON table_name
trigger_body
在同一个方案下不允许重名。
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
IF (TO_CHAR (SYSDATE; "HH24") NOT BETWEEN "08" AND "12") AND DELETING
THEN
RAISE_APPLICATION_ERROR (…20502;"You may delete from EMPLOYEES table
only during business hours。");
第 94 页,共 106 页 
…………………………………………………………Page 95……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通 
ELSIF (TO_CHAR (SYSDATE; "HH24") NOT BETWEEN "12" AND "18") AND INSERTING THEN
RAISE_APPLICATION_ERROR (…20500;"You may insert into
EMPLOYEES table only during business hours。");
ELSIF (TO_CHAR (SYSDATE; "HH24") NOT BETWEEN "8" AND "18") AND UPDATING ("SALARY")
THEN
RAISE_APPLICATION_ERROR (…20503;"You may update
SALARY only during business hours。");
ELSE
RAISE_APPLICATION_ERROR (…20504;"You may update
EMPLOYEES table only during normal hours。");
END IF;
END;
2。行级触发器:
CREATE 'OR REPLACE' TRIGGER trigger_name
timing
event1 'OR event2 OR event3'
ON table_name
'REFERENCING OLD AS old / NEW AS new'
FOR EACH ROW
'WHEN (condition)' //执行条件
trigger_body
:OLD。字段名/:NEW。字段名 引用格式。
例:
CREATE OR REPLACE TRIGGER restrict_salary
BEFORE INSERT OR 'UPDATE OF' salary ON employees
FOR EACH ROW
WHEN (new。salary is not null) //在出发器头里,new。salary 相当与本身的变量
BEGIN
IF :NEW。salary》2*:old。salary //在TRIGGER_BODY 里,:NEW。salary 相当与一个绑 
定变量
or :NEW。salary
小说推荐
返回首页返回目录