ORACLE中存储过程的使用(一)

本文详细介绍了Oracle存储过程的概念、分类及使用方法。包括无参数、带输入参数、带输出参数和带输入输出参数的存储过程的创建与调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备:ORACLE 11g
编辑器: pl/sql developer

1. 什么是存储过程?

简单点理解,存储过程类似于java程序中的函数,具有模块化,可重用性,可维护,更安全的特点,并且可以被程序调用(是不是类似于函数)。存储过程分为4类:(1)不带参数的;(2)带输入参数的;(3)带输出参数的;(4)带输入输出参数的。

2. 存储过程的语法

 CREATE [OR REPLACE] PROCEDURE <过程名>[(参数列表)] IS|AS 
         [局部变量声明]
         BEGIN
            可执行语句
[EXCEPTION
            异常处理语句]
         END [<过程名>];

IS|AS :表示可以使用 IS ,也可以使用AS
OR REPLACE:如果系统已存在该存储过程,将被替换
参数列表:参数不需要声明长度,可选
参数变量的类型:in 为默认类型,表示输入; out 表示只输出;in out 表示即输入又输出;

【调用方式】
在PL/SQL块中直接使用过程名;
在PL/SQL程序外使用 exec[ute] <过程名>[(参数列表)];
注意:上面的中括号表示可有可无

3存储过程的使用

(1)无参数的存储过程
CREATE OR REPLACE PROCEDURE PRO_TEST1 IS
BEGIN
    DBMS_OUTPUT.put_line('HELLO WORLD!');
END;
---------------------------------------
BEGIN
    PRO_TEST1;
END;

友情提示:先执行分割线上面定义的存储过程,再执行分割线下面的调用存储过程
执行结果为:

HELLO WORLD!

但是,在使用第二种方法EXECUTE 存储过程的时候,一直提醒 “不是有效的sql语句” ,经过上网查找方法,得知,我当前使用的是 sql窗口中 ,写的语句应该是sql语句,但是execute 存储过程是一个 命令语句,必须在命令窗口中执行,先输入 set serveroutpu on 命令,再执行 execute 存储过程
这里写图片描述

(2)带输入参数的存储过程

这里写图片描述
当然,可以多次调用
BEGIN
PRO_TEST2(‘111223’,’小米’);
PRO_TEST2(‘111224’,’小那’);
PRO_TEST2(‘111225’,’小才’);
END;
结果我就不写了。

(3)带输出参数的存储过程

这里写图片描述

带输出参数的存储过程,输出参数的定义,必须使用OUT,在调用带输出参数的存储过程的时候,输出的变量需要在declare中定义(否则你将谁输出了)。
输出结果:
这里写图片描述

(4)带输入输出参数的存储过程

这里写图片描述
结果是:
这里写图片描述

当该存储过程的输出参数有多个时,并且你不知道他们的参数的位置次序,为了不把参数次数次序搞乱,可以使用下面方法:
比如:你的存储过程是这样定义的:

    Create or replace procedure pro_query(
           s_empid emp.t_empid%type,  --第一个为员工编号
           s_empname out t_emp.empname%type,--第二个为姓名
           s_sal out t_emp.sal%type--第三个为薪资
    )

如果你不知道存储过程的参数:第二个为 姓名 ,第三个为 薪资,可以在调用存储过程的时候的使用符号 => ;比如你调用存储过程:

    declare
     p_empname t_emp.empname%type;
     p_empsal t_emp.sal%type;
    begin
     pro_query_enameAndSal_by_empno('11104', s_sal => p_sal, s_empname => p_empname );--使用符号 =>,可避免参数次序不对应问题 
     dbms_output.put_line('员工号为11104的员工名称为:'|| p_empname ||',其工资为:'|| p_sal);
    end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值