存储过程的学习
存储过程创建语法:
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;
If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;
注意事项:
1, 存储过程参数不带取值范围,in表示传入,out表示输出
2, 变量带取值范围,后面接分号
3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录
4, 用select 。。。into。。。给变量赋值
5, 在代码中抛异常用 raise+异常名
环境配置
//创建test表:
create table test
(
id number(10),
name varchar2(100)
)
//创建序列
create sequence g_seq
minvalue 1
maxvalue 999999999999
start with 141
increment by 1
cache 20;
基本例子:
1 不带参数
create or replace procedure test_xg_p1
is
begin
dbms_output.put_line('hello world! this is the first procedure');
insert into test values (g_seq.nextval,'sky');
commit;
end;
2 带输入输出参数
create or replace procedure test_xg_p2(a in number,x out number)
is
begin
x:=a;
end test_xg_p2;
3 带逻辑判断
create or replace procedure
test_xg_p3(
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_xg_p3;
4 带循环
create or replace procedure test_xg_p4
(
a in number,
x out varchar
)
is
temper number(6);
begin
temper := 0;
for tempa in 0..a loop
begin
temper :=temper + tempa;
end;
end loop;
x:= temper;
end test_xg_p4;
5 带从数据库表中返回值的
create or replace procedure test_xg_p5
(
x out varchar2
)
is
temper varchar2(1024);
begin
temper :='start->';
select name into temper from test where id = 1;
x:= temper;
end test_xg_p5;
6 带游标和循环的
create or replace procedure test_xg_p6
(
x out varchar2
)
is
temper varchar2(1024);
cursor cursor1 is select * from test;
begin
temper :='start->';
for cursor_result in cursor1 loop
begin
temper :=temper||cursor_result.name;
end;
end loop;
x:=temper;
end test_xg_p6;
procedure 测试方法:
1 command window : sql > exec 存储过程名称带参数
2 command window : sql > begin
2 存储过程名称带参数;
3 end;
4 /
3 右击存储过程 > test
第三种效果最好,可以看到参数、变量、返回值、输出等