1.存储过程(1)存储过程的创建及修改语法: CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] datatype [{(:= | DEFAULT ) defaultvalue}] [, ...])] {IS | AS} BEGIN procedure_body END procedure_name; 语法解析: IN:输入参数; OUT:输出参数; IN OUT:即可输入也可输出的参数; datatype:参数的数据类型,此处不能带精度。 :=|DEFAULT:用于设置参数的默认值。 (2)例1:过程的调用例2:带两个参数过程调用 (3) 删除过程 DROP PROCEDURE test_procedure;2.函数 过程用来完成一项任务,可能不返回值,也可能返回多个值,过程的调用是一条PL/SQL语句;函数包含RETURN子句,用来进行数据操作,并返回一个单独的函数值,函数的调用只能在一个表达式中。 语法:--函数是可以返回值的命名的 PL/SQL 子程序。 --创建函数的语法: CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END; 例: 调用函数: 3.程序包中的游标 游标的定义分为游标规范和游标主体两部分 在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型 RETURN子句指定的数据类型可以是: 用 %ROWTYPE 属性引用表定义的记录类型 程序员定义的记录类型 例1: 调用 例2: 实现增删查改: 4.触发器 (1)触发器的分类触发器分为 DML 触发器、 INSTEAD OF 触发器、DDL 触发器和系统触发器三种类型DML 触发器包括行级触发器、语句级触发器 (2)触发器的功能: 自动生成数据 自定义复杂的安全权限例: 针对周六日不能进行修改数据库: 测试: 提供审计和日志记录 启用复杂的业务逻辑 (3)行级触发器: 用触发器实现自增的主键: 1.
2.效率高 3.效率低 (4)语法解析: INSTEAD OF:仅用于替代触发器,即event_target必须为视图,而且必须带FOR EACH ROW子句 trigger_event:触发的事件。可以是DML事件(INSERT、UPDATE、DELETE、INSERT OR UPDATE、UPDATE OF column_name),系统事件(STARTUP、SHUTDOWN等)。 event_target:即指trigger_event事件是发生在哪个对象上的。如DML事件,那么event_target应该是表名或视图名,如果是系统事件,那么event_target就应该是DATABASE或SCHEMA FOR EACH ROW:如果带此子句,即表示该触发器是行级触发器,如果省略,则是语句级触发器。 WHEN condition :用于限制行级触发器,只有满足condition条件,才会触发触发器。 (5)修改触发器的状态触发器有ENABLED和DISABLED两种状态。 修改某个触发器的状态可以执行下面的SQL: ALTER TRIGGER trigger_name ENABLE | DISABLE; 使某个表上的所有触发器有效或无效: ALTER TABLE table_name {ENABLE | DISABLE} ALL TRIGGERS; (6)删除触发器DROP TRIGGER trigger_name; |