存储过程
(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