学习笔记_oracle——过程函数触发器

来源:互联网 发布:傲剑十八铜仁数据 编辑:程序博客网 时间:2024/05/16 05:50

存储过程、函数、触发器
存储过程
 实质性特定任务的子程序
 优点
  1、模块化
  2、可重用性
  3、可维护性
  4、安全性

 创建语法
  CREATE [OR REPLACE] PROCEDURE 过程名称
  [(参数列表)]
  {IS|AS} 
   [声明变量]
  BEGIN
   --执行语句
  [EXCEPTION]
   --异常处理语句
  END [过程名称]
  //===============================================
  CREATE OR REPLACE PROCEDURE find_emp
  (emp_no NUMBER)
  AS
   empname VARCHER2(20)
  BEGIN
   --执行语句
  [EXCEPTION]
   --异常处理语句
  END find_emp ;
 使用储存过程
  EXECUTE 过程名称 (参数列表);
 存成过程参数模式
  IN 输入模式(模式)
  OUT 输出模式
  IN OUT 输入输出模式
  1、IN是默认模式
  2、OUT、IN OUT模式在返回到调用环境前赋值
  3、在参数列表中不能给OUT、IN OUT赋值
 存储过程的授权
  执行权、调试权
  只授权
  GRANT EXECUTE ON 过程名 TO 用户名
  授权并授权授权的权限
  GRANT EXECUTE ON 过程名 TO 用户名 WITH GRANT OPTION

程序块的跟踪和调试
 PL/SQL developor环境下
 SHOW ERREORS 查看某个程序块是否有错误
  语法SHOW ERREORS [程序块的类型,名称]
  类型:FUNCTION | PROCEDURE | PACKEAGE | PACKAGE BODY | TRIGGER | VIEW | TYPE  | TYPE BODY | DIMENSION | JAVA SOURCE |JAVA CLASS}
 developor环境下的调试
  调试窗口
   FILE——NEW——TEST WINDOE
   窗口页签
   Test script 测试代码
   DSMS OutPut 打印输出
   statistics 统计表
   窗口图表
   第一个: 调试
   第二个: 执行
   第三四个: 单步调试
   第五六个: 跳出
  调试步骤
   1、设置断点
   2、写入测试代码
   3、输入想显示的变量,查看值
   4、按执行或逐步进入断点处
 自主事务
  自主事务是由另一个事务处理启动的独立的事务处理。
  解决问题
   在调用存储过程时,一个过程的更改对这两个
   过程都可见,任何提交或回退都会影响这两个
  标记为自主事务
   在CREATE之中,写入编译指使PRACMA AUTONOMOUS_TRANSACTION;

函数
 用于返回特定数据的PL/SQL程序块,必须有一个返回值
 创建语法
  CREATE [OR REPLACE] FUNCTION 函数名称
  [(参数列表)]
  RETURN datatype
  IS|AS
  BEGIN
   语句块(必须含有RERTUN)
  END;
  //===================实例======================
  CREATE OR REPLACE FUNCTION 函数名称
  RERTUN VARCHAR2
  IS
  BEGIN
   RETURN 'asd'
  END;
 调用语法
  无参的:直接用函数名
  有参数:函数名(参数列表)
 与过程的区别
   存储过程  函数
  调用 作为PLSQL语句执行 作为表达是一部分
  RETURN 不包含,有也不用于 必须包含
   返回   
  
程序包
 是一种数据库对象,是对相关PL/SQL、子程序、游标、异常
 变量、常量等的封装
 
 构成
  程序包规范 声明PL/SQL、子程序、游标、异常
    变量、常量
  程序包主体 实现规范中定义的PL/SQL、子程序、游标、异常
    变量、常量
 程序包规范
  应用程序的接口
  创建语法
  CREATE [OR REPLACE] PACKAGE 包名
  IS | AS
   [声明公共类型、常量、变量、异常、游标等]
   [声明PLSQL子程序]
  END 包名;
  //==================实例================
  CREATE OR REPLACE PACKAGE 包名
  IS
   PROCEDURE emp_proc();
   FUNCTION emp_fun () RETURN VARCHER2;
   [声明PLSQL子程序]
  END 包名;
 程序包主体
  包含规范中每一个的实现
  CREATE [OR REPLACE] PACKAGE BODY 包名
  IS | AS
   [声明常量、变量、异常、游标等]
   [声明PLSQL子程序]
  [BEGIN
   初始化代码]
  END 包名;
  //===================实例===============
  CREATE OR REPLACE PACKAGE BODY 包名
  AS
   PROCEDURE emp_proc() IS
    --过程
   END emp_proc
   FUNCTION emp_fun() RETURN VARCHER2 IS
    --函数
   END emp_fun;
  
  END 包名;
触发器
 当特定事物出现时,自动执行的代码块
 功能:
  限制对表的修改
  自动生成派生列
  强制数据一致
  强制复杂的完整性约束条件
  提供审计和日志功能
  防止无效的事务逻辑
  启用复杂的业务逻辑
 语法
  CREATE [OR REPLACE] TRIGGER 触发器名
   --以上表示之前、之后、代替原操作
  {BEFORE | AFTER | INSREAD OF}
   --指定构成触发器的数据库操作类型,UPDATE可以指定列
  {INSERT | DELETE | UPDATE [OF 修改的列的列表]}
  [OR {INSERT | DELETE | UPDATE [OF column[, column]]}]
   --创建触发器的表或视图
  ON [schema.]
   --指定新行和旧行的其他名称,默认NEW和OLD
  [PEFERENCINC [NEW AS new_row_name] [OLD AS old_row_name] ]
   --是否对每行执行触发
  [FOR EACH ROW]
   --限制执行条件
  [WHEN (condition)]
  [DECLARE
   定义]
  BEGIN
   PLSQL块
  [EXCEPTION
   异常处理]
  END 触发器名
  //==============实例======================
  CREATE OR REPLACE TRIGGER 触发器名
  BEFORE
  INSERT OR UPDATE OF position
  ON 表名
  FOR EACH ROW
  WHEN ( New.positon <> 5 )
  BEGIN
   PLSQL块
  END 触发器名
 分析
  触发器语句
   是可以导致触发器发生的事件
    INSERT OR UPDATE OF position
    ON 表名
    FOR EACH ROW
  触发器限制
   当条件值为真才运行触发器
    WHEN ( New.positon <> 5 )
  触发器操作
   触发器中的SQL语句和代码
   BEGIN
    PLSQL块
   END 过程名
 类型
  行级触发器
   对DML语句影响的每一行都执行一次
   使用: [FOR EACH ROW]字句
   可以使用OLD和NEW访问修改先后的数据
  语句级触发器
   对每个DML语句执行一次
   使用: 是默认类型
  INSTEAD OF触发器
   在视图上创建的触发器
   用于替换所使用的实际语句的触发器
  模式触发器
   用户事件触发器
   DDL语句的触发器
  数据库触发器
   创建在数据库上的触发器
 状态
  DISABLED 非启用状态
  ENABLED  启用状态
  改变方式
   ALTER TRIGGER 触发器名 {ENABLE | DISABLE}
  删除触发器
   DROP TRIGGER 触发器名称
 查看
  用户字典视图
  DESC USER_TRIGGERS

0 0
原创粉丝点击