Oracle存储过程之带有返回参数
2015-12-24 17:15
471 查看
1、基本语法
创建存储过程,需要有CREATEPROCEDURE或CREATE ANY PROCEDURE的系统权限。该权限可由系统管理员授予。创建一个存储过程的基本语句如下:
CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]
{AS|IS}
[说明部分:参数定义、变量定义、游标定义]
BEGIN
可执行部分
[EXCEPTION 错误处理部分]
END [过程名];
其中:
可选关键字OR REPLACE 表示如果存储过程已经存在,则用新的存储过程覆盖,通常用于存储过程的重建。
参数部分用于定义多个参数(如果没有参数,就可以省略)。参数有三种形式:IN、OUT和IN OUT;如果没有指明参数的形式,则默认为IN。
IN 定义一个输入参数变量,用于传递参数给存储过程
OUT 定义一个输出参数变量,用于从存储过程获取数据
IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
例1,创建带输入输出参数的存储过程:
create or replace procedure test_procedure(a in number, x out varchar2) is
begin
if a >= 90 then
begin
x := 'A';
end;
end if;
if a < 90 then
begin
x := 'B';
end;
end if;
if a < 80 then
begin
x := 'C';
end;
end if;
if a < 70 then
begin
x := 'D';
end;
end if;
if a < 60 then
begin
x := 'E';
end;
end if;
end test_procedure;
执行结果:
例2、创建 参数为 IN OUT 的存储过程
create table EMP (EMPNO number , ENAME varchar2(32) );
insert into EMP (EMPNO ,ENAME) values (10,'张三');
insert into EMP (EMPNO ,ENAME) values (20,'小马');
insert into EMP (EMPNO ,ENAME) values (30,'小米');
insert into EMP (EMPNO ,ENAME) values (40,'小明');
CREATE OR REPLACE FUNCTION GET_EMP_NAME(P_EMPNO NUMBER DEFAULT 10)
RETURN VARCHAR2 AS
V_ENAME VARCHAR2(32);
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = P_EMPNO;
RETURN(V_ENAME);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- DBMS_OUTPUT.PUT_LINE('没有该编号雇员!');
RETURN('没有该编号雇员!');
WHEN TOO_MANY_ROWS THEN
-- DBMS_OUTPUT.PUT_LINE('有重复雇员编号!');
RETURN('有重复雇员编号!');
WHEN OTHERS THEN
--- DBMS_OUTPUT.PUT_LINE('发生其他错误!');
RETURN('发生其他错误!');
END;
执行结果:
创建存储过程,需要有CREATEPROCEDURE或CREATE ANY PROCEDURE的系统权限。该权限可由系统管理员授予。创建一个存储过程的基本语句如下:
CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]
{AS|IS}
[说明部分:参数定义、变量定义、游标定义]
BEGIN
可执行部分
[EXCEPTION 错误处理部分]
END [过程名];
其中:
可选关键字OR REPLACE 表示如果存储过程已经存在,则用新的存储过程覆盖,通常用于存储过程的重建。
参数部分用于定义多个参数(如果没有参数,就可以省略)。参数有三种形式:IN、OUT和IN OUT;如果没有指明参数的形式,则默认为IN。
IN 定义一个输入参数变量,用于传递参数给存储过程
OUT 定义一个输出参数变量,用于从存储过程获取数据
IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
例1,创建带输入输出参数的存储过程:
create or replace procedure test_procedure(a in number, x out varchar2) is
begin
if a >= 90 then
begin
x := 'A';
end;
end if;
if a < 90 then
begin
x := 'B';
end;
end if;
if a < 80 then
begin
x := 'C';
end;
end if;
if a < 70 then
begin
x := 'D';
end;
end if;
if a < 60 then
begin
x := 'E';
end;
end if;
end test_procedure;
执行结果:
例2、创建 参数为 IN OUT 的存储过程
create table EMP (EMPNO number , ENAME varchar2(32) );
insert into EMP (EMPNO ,ENAME) values (10,'张三');
insert into EMP (EMPNO ,ENAME) values (20,'小马');
insert into EMP (EMPNO ,ENAME) values (30,'小米');
insert into EMP (EMPNO ,ENAME) values (40,'小明');
CREATE OR REPLACE FUNCTION GET_EMP_NAME(P_EMPNO NUMBER DEFAULT 10)
RETURN VARCHAR2 AS
V_ENAME VARCHAR2(32);
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = P_EMPNO;
RETURN(V_ENAME);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- DBMS_OUTPUT.PUT_LINE('没有该编号雇员!');
RETURN('没有该编号雇员!');
WHEN TOO_MANY_ROWS THEN
-- DBMS_OUTPUT.PUT_LINE('有重复雇员编号!');
RETURN('有重复雇员编号!');
WHEN OTHERS THEN
--- DBMS_OUTPUT.PUT_LINE('发生其他错误!');
RETURN('发生其他错误!');
END;
执行结果:
相关文章推荐
- Oracle 数据库重放(Database Replay)功能演示
- [Oracle拾遗]创建表空间、创建用户以及授权、查看权限
- Oracle分组后计数
- oracle数据库修改字符集
- Oracle 11G Client 客户端安装步骤(图文详解)
- Oracle数据库的导入和导出
- Oracle AWR粗概
- 我的oracle学习笔记(血泪史之五)…
- Oracle - 数据库的实例、表空间、用户、表之间关系
- VMware下CentOS6.5安装oracle11g RAC
- 查看、修改ORACLE最大进程数 及 ORA-00064 处理
- 关于sqoop与datax。 和sqoop to oracle插件OraOop
- Oracle directory查询
- oracle树操作(select start with connect by prior)
- ORACLE存储过程中%TYPE和%ROWTYPE的区别
- Oracle杀死死锁进程
- oracle 10g升级到11g
- PGA资源的管理
- Oracle Dataguard的原理与基本配置
- Oracle TO_CHAR()和TO_DATA()函数日期和字符串互相转换