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

存储过程

简介:
+关注继续查看

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



 

 

 

 

 


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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
18866 0
存储过程写法
引用:http://hi.baidu.com/vb98/blog/item/4c6de43f780bf5fa54e723ed.html 存储过程调用:http://hi.baidu.com/vb98/blog/item/7fbda7d99a9fd93a11df9bb4.
524 0
SQL——存储过程
原文:SQL——存储过程 1. 为什么使用存储过程      应用程序通过T-SQL语句到服务器的过程是不安全的。      1) 数据不安全       2)每次提交SQL代码都要经过语法编译后在执行,影响应用程序的运行性能       3) 网络流量大   2. 什么是存储过程         存储过程是SQL语句和控制语句的预编译集合,保存在数据库里,可由应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其他强大的编程功能。
967 0
存储过程之一—建立简单的存储过程
一、存储过程   存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
987 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载