重新建立会话 符合规则 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