oracle存储过程篇

本文详细介绍了Oracle存储过程的创建,包括不同参数模式(in, out, in out)的使用,通过示例展示了如何根据用户ID查询用户名。同时,讲解了存储过程中使用%type的好处,以及执行存储过程的不同方式和授权给其他用户的方法。" 134339436,11219767,物奇平台ENC通话降噪算法集成与调试,"['人工智能', '音频处理', '信号处理', '语音识别', '嵌入式开发']

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

存储过程的参数有三种模式:

in(默认的参数模式,用来接收调用程序的值)

out(用来向调用程序返回值)

in out(用于接收调用程序的值,并向调用程序返回更新的值)

以下用一个小例子为例:

假设有一张用户表user_info,里面有字段userid,username,age,写一个存储过程,根据userid查询用户名

1、创建存储过程:

只有一个默认参数:

create or replace procedure p_test(user_id in number)

-------------------- 声明变量部分
is 
user_name userinfo.username%type;

-------------------- 可执行部分
begin
    select username into user_name from userinfo where userid = user_id;
    dbms_output.put_line('用户名为:'||user_name);

-------------------- 异常部分
exception
    when others then
        dbms_output.put_line('查询不到该用户');
end;

存储过程中变量后面跟%type(例如user_name userinfo.username%type;)的意思:user_name是自己自定义的变量,userinfo是数据库中存在的一张表,username是表中的一个字段,然后%type就是username的数据类型,其实就是让user_name这个变量的数据类型与数据库里面的表字段类型匹配,从而不必担心类型不匹配的问题。

用%type的好处:

(1)所引用的数据库中列的个数和数据类型可以不必知道

(2)所引用的数据库中列的个数和数据类型可以实时改变

既有输入参数,又有输出参数:

create or replace procedure p_test(user_id in number,user_name out varchar2)
is 
begin
    select username into user_name from userinfo where userid = user_id;
exception
    when others then
        dbms_output.put_line('查询不到该用户');
end;

此时应该如下调用:

declare
    user_name varchar2(50)
begin
    userId:=1
    p_test(1,user_name);
end;

in out 参数例子:

create or replace procedure p_test(user_id in number,user_name in out varchar2,user_age out number)
is 
begin
    select username,age into user_name,user_age from userinfo where userid = user_id and username = user_name;
exception
    when others then
        dbms_output.put_line('查询不到该用户');
end;

此时应该如下调用:

declare
    v_username varchar2(50);
    v_userage number;
begin
    v_userid:=1;
    p_test(v_userid,v_username,v_userage);
end;

2、执行存储过程

第一种方法:call p_test(1);

第二种方法:

declare
begin
    p_test(1);
end;

第三种方法:在命令行中执行

execute p_test(1);

不过执行之前注意打开命令行输出提示:set serveroutput on;

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

grant execute on proc_name to user_name;

4、删除存储过程

drop procedure proc_name;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值