一、存储过程的理解
create or replace procedure 存储过程名
as
begin
null
end
行1:create or replace procedure 是一个SQL语句,通知oracle数据库去创建一个叫做skeleton储存过程,如果存在就覆盖它。
行2:as关键词表明后面将跟随一个pl/sql体。
行3:begin关键词表明pl/sql体的开始。
行4:null 表明pl/sql语句什么事情都不做,这句不能删除,因为pl/sql体中至少需要有一句。
行5:end关键词表明pl/sql体的结束。
二、存储过程创建语法
create or replace procedure 存储过程名 (param1 in type,para2 out type)
as
变量1 类型(值范围); eg: vs_msg VARCHAR2(20);
变量2 类型(值范围);
begin
select count(*) into 变量1 from 表A where 列名 = param1;
if (判断条件) then
select 列名 into 变量2 from 表A where 列名=param1;
dbms_output.put_line('打印信息');
elseif (判断条件) then
dbms_output.putline('打印信息');
else
raise 异常名 (no_data_found);
end if;
exception
when others then
rollback;
end
对如上理解:
存储过程参数不带取值范围,in表示传入,out表示输出。类型可以使用任意oracle中的合法类型。
变量带取值范围,后面接分号
在判断语句之前最好先用count(*)函数判断是否存在该条操作记录
用select ... into ...给变量赋值
在代码中抛异常用 raise+异常名
三、
create or replace procedure 存储过程名
{
--定义参数
param1 in char(6),
param2 out number,
}
as
--定义变量
param3 varchar2(10);
param4 varchar2(16);
begin
--用输入参数给变量赋值
end
四、oracle存储过程语法
1.判断语句
if 比较式 then begin end;end if
create or replace procedure test(x in number)
as //本例子不需要定义变量,所以as后面没有变量
begin
if x > 0 then
begin
x: = -x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if;
end test;
2.for循环语句
for ... in ... loop
--执行语句
end loop;
(1)循环遍历游标
create or replace procedure test() //这里没有输入参数
as
Cursor cursor is select name from student;
name varchar2(16);
begin
for name in cursor loop
begin
dbms_output.putline(name); //输出表student中字段为name的所有的数据
end;
end loop;
end test;
(2)while循环
while 条件语句 loop
begin
end;
endloop;
//举个例子
create or replace procedure test(i in number)
as
begin
while i < 10 loop
begin
i:=i+1;
end;
end loop;
end test;
3.游标的使用
oracle 中的cursor非常有用,用于遍历临时表中的查询结果。其相关方法和属性很多,下面介绍一-二。
3-1 Cursor型游标 (注意:游标不能用于参数传递)
create or replace procedure test()
as
cursor1 Cursor is select name from studentTable where ...;//游标的使用方式1
cursor2 Cursor;
begin
select name into cursor2 from studentTable where...;//游标的使用方式2
可以使用 for x in cursor loop ...end loop;来实现对cursor的遍历。
end test;