开发者社区> 技术小胖子> 正文

存储过程

简介:
+关注继续查看

语法: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,如需转载请自行联系原作者



 

 

 

 

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
存储过程与函数
MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可
93 0
存储过程详解
存储过程详解
70 0
存储过程的语法讲解
在上一篇文章:别再说不知道什么是存储过程和存储函数了中简单的介绍了存储过程和存储函数以及其使用。其实存储过程是可以进行编程的,所以可以和其他的编程语言一样使用变量、表达式以及控制结构进行编程,从而实现一些复杂和有用的功能。
85 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载