Oracle学习笔记二十二:存储过程,•存储过程经编译和S
一、存储过程简介
• 存储过程(Stored Procedure)是一组为了完成特定功能的PL/SQL语句块,经编译后存储在数据库中。
• 存储过程经编译和SQL优化后存储在数据库服务器中,使用时只要调用即可。
• 存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
• 用户通过指定存储过程的名字给出参数(如果该存储过程带有参数)来执行它。
二、存储过程分类
1)系统存储过程
• 系统存储过程就是由Oracle预先提供的一组完成特定功能的存储过程,安装完Oracle就有了。
2)自定义存储过程
• 自定义存储过程就是存在Oracle数据库里由一组PL/SQL语句组成的自定义过程(Procedure)。它可以供其它Oracle自定义存储过程、自定义函数和Job调用或者由客户端程序调用。
三、存储过程语法
• 定义存储过程的语法:
CREATE [OR REPLACE] PROCEDURE 存储过程名
[(参数名1 [参数模式] 参数数据类型1,参数名2 [参数模式] 参数数据类型2)]
IS [AS]
[变量 [constant] 类型 [默认值]]
BEGIN
PL/SQL 语句块;
END 存储过程名;
四、无参存储过程
1)定义无参存储过程
create or replace procedure PrintToday is begin dbms_output.put_line(sysdate); end;
2)执行无参存储过程
begin PrintToday(); end;
五、存储过程参数
• 建立存储过程时,既可以指定存储过程的参数,也可以不提供任何参数。
• 存储过程的参数主要有三种类型:输入参数(IN)、输出参数(OUT)、输入输出参数(IN OUT),其中IN用于接收调用环境的输入参数,OUT用于输出数据传递到调用环境,IN OUT不仅要接收数据,而且要输出数据到调用环境。
• 在建立存储过程时,输入参数的IN可以省略。
• 注意:当定义存储过程的参数时,只能指定数据类型,不能指定数据长度。
六、有参存储过程
6.1、带输入参数存储过程
1)定义带输入参数存储过程
create or replace procedure InsertEmp ( p_empno varchar2, p_ename varchar2 ) is begin insert into emp (empno,ename) values (p_empno,p_ename); commit; end;
2)执行带输入参数存储过程
begin InsertEmp ('1004','Green'); end;
6.2、带输出参数存储过程
1)定义带输出参数存储过程
create or replace procedure CountEmp ( p_ename in varchar2, out_value out number ) is begin select count(1) into out_value from emp where ename=p_ename; end;
2)执行带输出参数存储过程
declare out_value number; begin CountEmp ('James',out_value); dbms_output.put_line(out_value); end;
七、维护存储过程
• 修改存储过程
• 与创建的语法相同,使用REPLACE替换即可。
• 删除存储过程
• drop procedure [schema.]过程名