存储过程

简介:

语法:CREATE OR REPLACE PROCEDURE procedure_name

[(parameter1 IN|OUT|IN OUT data_type,

...

parametern IN|OUT|INOUT data_type

)]

IS|AS

[declaration_section;]

BEGIN

procedure_body;

[EXCEPTION exception_handlers]

END [procedure_name];

说明:

    参数传递方式:IN, OUT, IN OUT 
    IN:表示输入参数,按值传递方式。如果存储过程的参数没有指定参数传递类型,默认为IN;参数列表中为IN参数赋予一个默认值,不能为OUT、IN OUT参数赋予默认值。  
    OUT:表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。 
    IN OUT:即可作输入参数,也可作输出参数。 
    参数的数据类型只需要指明类型名即可,不需要指定宽度,参数的宽度由外部调用者决定。

 

--样例

1、创建存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CRCREATE  OR  REPLACE  PROCEDURE  procedure_xju(   
p_para1 VARCHAR2,   
p_para2  out  NUMBER,   
p_para3  in  out  VARCHAR2   
)
AS    
v_name varchar2(20);   
BEGIN
p_para2 :=123456789;  
v_name :=  '张三' ;   
p_para3 := v_name;   
DBMS_OUTPUT.PUT_LINE( 'p_para1参数值为:' ||p_para1);   
DBMS_OUTPUT.PUT_LINE( 'p_para2参数值为:' ||p_para2);   
DBMS_OUTPUT.PUT_LINE( 'p_para3参数值为:' ||p_para3);   
END  procedure_xju;

2、调用存储过程

2.1 使用execute命令调用过程

2.2 使用call命令调用过程
SQL> var p1 VARCHAR2(10)
SQL> var p2 NUMBER
SQL> var p3 VARCHAR2(10)
SQL> exec procedure_xju(:p1,:p2,:p3)

输出结果为:

    p_para1参数值为:第一个参数
    p_para2参数值为:123456789
    p_para3参数值为:张三
    PL/SQL procedure successfully completed

 

查看参数值:

SQL> print p1
p1
---------
第一个参数

SQL> print p2
p2
---------
123456789

SQL> print p3
p3
---------
张三

 

3、传递变量和数据

    为存储过程参数传递变量和数据有三种方法:

3.1 位置传递

SQL> exec procedure_xju(:p1,:p2,:p3)

或:
SQL> exec procedure_xju('第一个参数',:p2,:p3)

3.2 名称传递

SQL> exec procedure_xju(p_para1=>:p1,p_para3=>:p3,p_para2=>:p2)

或:
SQL> exec procedure_xju(p_para1=>'第一个参数',p_para3=>:p3,p_para2=>:p2)

3.3 组合传递

SQL> exec procedure_xju(:p1,p_para3=>:p3,p_para2=>:p2)


SQL> exec procedure_xju('第一个参数',p_para3=>:p3,p_para2=>:p2)

 

4、查看存储过程源代码

SQL> select text FROM user_source WHERE name='PROCEDURE_XJU';

 备注:存储过程名称必须大写。

 

5、将过程的执行权限授予其他用户

GRANT EXECUTE ON  PROCEDURE_XJU  TO PUBLIC;

 

6、删除存储过程

SQL>DROP PROCEDURE procedure_xju;

 

 示例一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE  OR  REPLACE  PROCEDURE  find_emp(p_empno  IN  NUMBER:=7900)
AS
empname varchar2(20);
BEGIN
select  ename  into  empname  from  emp  where  empno=p_empno;
dbms_output.put_line( '雇员编号:' ||p_empno|| ',雇员姓名是:' ||empname);
exception
when  no_data_found  then
dbms_output.put_line( '雇员编号未找到' );
end  find_emp;
 
SQL>  exec  find_emp();
雇员编号:7900,雇员姓名是:JAMES
PL/SQL  procedure  successfully completed

 备注:输入参数设置了默认值。

 

示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create  or  replace  procedure  procedure_test(p_para1 varchar2,p_para2  out  number)
is
v_sal number;
begin
select  sal  into  v_sal  from  emp  where  empno=p_para1;
if v_sal<2000  then
p_para2:=1000;
else
p_para2:=500;
end  if;
end ;
调用带 OUT 参数的过程:
declare
p2 number;
begin
procedure_test( '7900' ,p2);
dbms_output.put_line( 'p2的值为:' ||p2);
end ;

 输出结果:p2的值为:1000

 

 

 

 

 

 

      本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1597943,如需转载请自行联系原作者



 

 

 

 

 


相关文章
|
8月前
|
存储 SQL Java
什么是存储过程?
我们可以把存储过程看成是一些 SQL 语句的集合,中间加了点逻辑控制语句。存储过程在业务比较复杂的时候是非常实用的,比如很多时候我们完成一个操作可能需要写一大串 SQL 语句,这时候我们就可以写有一个存储过程,这样也方便了我们下一次的调用。存储过程一旦调试完成通过后就能稳定运行,另外,使用存储过程比单纯 SQL 语句执行要快,因为存储过程是预编译过的。
68 0
|
10月前
|
存储 SQL 缓存
存储过程详细介绍
存储过程详细介绍
|
10月前
|
存储 SQL Oracle
|
10月前
|
存储 SQL NoSQL
第15章_存储过程与函数
第15章_存储过程与函数
86 0
|
存储 SQL NoSQL
存储过程与函数
MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可
存储过程与函数
|
存储 SQL 关系型数据库
MySQL数据库(31):存储过程 procedure
MySQL数据库(31):存储过程 procedure
175 0
|
存储 SQL 数据库
存储过程详解
存储过程详解
201 0
存储过程详解
|
存储
存储过程的语法讲解
在上一篇文章:别再说不知道什么是存储过程和存储函数了中简单的介绍了存储过程和存储函数以及其使用。其实存储过程是可以进行编程的,所以可以和其他的编程语言一样使用变量、表达式以及控制结构进行编程,从而实现一些复杂和有用的功能。
179 0
存储过程的语法讲解
|
存储 SQL 关系型数据库