三皮的Oracle 数据库笔记- 编写存储过程函数-- 3种参数及传参--带实例

存储过程

(1)格式

create procedure 过程名(参数)
is
局部变量
begin
程序块(包括异常)
end 过程名;

重定义过程
create or replace procedure 过程名(参数)
is
局部变量
begin
程序块(包括异常处理部分)
end 过程名;

(2)编译并执行程序

编译:使用 / 编译并保存
执行:execute 过程名
实例
编写一个简单程序,不带参数


create or replace procedure Hello

is

begin
	dbms_output.put_line('HELLO WORLD!!');
end Hello;

在这里插入图片描述

(3)参数

带参数
参数类型:
(1)IN:需要送入/接收数据
(2)OUT:需要送出/输出数据
(3)IN OUT:既可以送入/送出,接收/输出数据
参数格式:参数名 参数类型 参数数据类型
参数名:由用户自定义变量名;
参数类型:上面的3种参数类型;
参数数据类型:Oracle的基本数据类型,用时不要指定长度,否则出错
IN 传参的3种方法
(1)名称法:参数名与数据绑定,可以不考虑位置(参数名=>数据)
(2)位置法:数据与参数所在位置顺序保持一致
(3)混合法:即可用位置法和名称法,但是一旦为名称法后不能切换为位置法
示例
向scott 的emp表插入数据(位置法)

create or replace procedure in_Demo
(v_no in number,v_nm in varchar2,v_sal in number)
is

begin
	insert into emp(empno,ename,sal)values(v_no,v_nm,v_sal);
end in_Demo;

在这里插入图片描述
OUT 传参
在out中,由于程序调用结束后,会释放空间,数据将会失去,所以我们得先绑定数据,将数据保存下来
绑定数据:variable 变量名 数据类型(指定长度)
实例:通过empno查ename,sal

create or replace procedure out_Demo
	(v_no in number,v_nm out varchar2,v_sal out number)
is 
begin
	select ename,sal into v_nm,v_sal from emp where empno=v_no;
end out_Demo;

在这里插入图片描述
IN OUT传参
既可以传入数据,也可以将数据绑定
实例:交换,x,y的值

create or replace procedure swap_Demo(v_x in out number,v_y in out number)
is 
	v_temp number;//局部变量,用来交换值的中间变量
begin
	v_temp:=v_x;
	v_x:=v_y;
	v_y:=v_temp;
end swap_Demo;

declare
x number:=&x;
y number:=&y;
begin
swap_Demo(x,y);
dbms_output.put_line(x||'  '||y);
end;

在这里插入图片描述

(4)异常处理

(1)利用系统预定义异常:dup_val_on_index(主键冲突)
使用: when dup_val_on_index then …
(2) 利用SQLCODE,SQLERRM的函数
使用:when others then …

(5)查看错误信息

如果出错,使用命令 show errors 可以查看错误信息

show errors

猜你喜欢

转载自blog.csdn.net/qq_43520913/article/details/105966332