日期:2014-05-16  浏览次数:20581 次

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

存储过程、函数、触发器
存储过程
 实质性特定任务的子程序
 优点
  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 包名;