一、如何创建存储过程:
1 创建不带参数的存储过程:
CREATE OR REPLACE PROCEDURE 存储过程名
IS
BEGIN
NULL;--此处做一些数据业务处理
END;IS 可以换成 AS 是一样的。BEGIN 和 END之间是存储过程内容,此处为NULL 什么也不做。
2 创建带参数的存储过程:
CREATE OR REPLACE PROCEDURE 存储过程名(param1 in type,param2 out type)
AS
BEGIN
NULL;
END;in 表示 param1 是传入参数,out 反之;type 表示param 的 类型(Oracle中的合法类型)。
二、变量
1 声明变量
语法:变量名 类型(类型范围)
s_msg VARCHAR2(1000);
e_integrity EXCEPTION;
2 为变量赋值
语法:变量名 := 值;
x := 1;
s_msg := SUBSTR(a_str,1,6);
s_str :='aaa'||'bbb';--字符串用单引号括起,连接符||
3 游标
/*生成游标并赋值*/
CURSOR 游标名 IS
SELECT……
FROM……
WHERE……
GROUP BY……;
CURSOR cursor_2; --声明
select username into cursor_2 from s_user where sex='m';--赋值
三、if /for /while
1 if
IF condition THEN
{...statements...}
ELSIF condition THEN
{...statements...}
ELSE
{...statements...}
END IF;
2 for
(1) 循环遍历游标
create or replace procedure test() as
Cursor cursor1 is
select name from student;
name varchar(20);
begin
for name in cursor1 LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2) 循环遍历数组
create or replace procedure test(varArray in myPackage.TestArray) as
i number;
begin
i := 1;
for i in 1..varArray.count LOOP
dbms_output.putline(i);
end LOOP;
end test;
3 while
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i:= i + 1;
end;
end LOOP;
end test;
四、常用函数
SUBSTR
TO_CHAR
ADD_MONTHS
TO_DATE
五、错误处理
/*OTHERS表示除了声明外的任意错误。SQLERRM是系统内置变量保存了当前错误的详细信息。*/
EXCEPTION
WHEN OTHERS THEN
vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把当前错误记录进日志表。
INSERT INTO LOG_INFO(proc_name,error_info,op_date)
VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);
COMMIT;
RETURN;
END;
Raise 异常名
PL/SQL 程序段只被编译一次并且以可运行的形式储存,以降低响应时间。在网络环境中,这将减少网络流量和响应时间。
PL/SQL对大小写不敏感,所以,除了在字符串和字符中,小写字母和它对应的大写字母是等价的。

281

被折叠的 条评论
为什么被折叠?



