(一)关于编写存储过程需要注意以下几点:
1>赋值符号 :=
逻辑等 =
2>注释单行代码用 --
注释代码块用 /*---*/
3>字符串连接符 ||
4>变量在变量声明区内进行声明:IS和BEGIN之间
5>变量声明方式通常有如下三种:
1)单个变量
mo_flag NUMBER :=0;
content TABLE.CONTENT%TYPE;
2)数组
TYPE data_type IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER; --引用形式为data_type(i)
TYPE rule_type IS RECORD (data_id TABLE.ID%TYPE,
data_name TABLE.NAME%TYPE
); --引用形式为rule_type(i).data_id
6>经常用到的一个内置函数DECODE:
DECODE(id,1,'Southlake',
2,'San Francisco',
3,'New Jersey',
4,'Seattle',
'Non-domestic')
当id是1时,返回Southlake;是2时,返回San Francisco;依次,如果都不是时,返回Non-domestic
(二)PL/SQL块结构
1>触发器
CREATE OR REPLACE TRIGGER trigger_name
AFTER|BEFORE INSERT|UPDATE|DELETE ON table_name
FOR EACH ROW
DECLARE
(声明部分)
BEGIN
(程序体)
EXCEPTION
(异常处理部分)
END;
2>存储过程
CREATE OR REPLACE PROCEDURE name(参数) IS
(声明部分)
BEGIN
(程序体)
EXCEPTION
(异常处理部分)
END;
3>函数
CREATE OR REPLACE FUNCTION func_name(参数) RETURN data_type IS
(声明部分)
BEGIN
(程序体)
EXCEPTION
(异常处理部分)
END;
注:DECLARE在触发器中进行变量声明的时候需要,存储过程和函数的变量声明时不需要
(三)应用和调试的时候需要注意以下几种应用:
1>SET SERVEROUTPUT ON BUFFER 20000;
用dbms_output.put_line('strin_content');可以在存储过程中输出信息,对存储过程进行调试;
只有将serveroutput变量设为on后,信息才能显示在屏幕上
2>EXECUTE procedure_name;
执行一个存储过程
3>select function() from dual;
通过sql语句执行一个函数
4>DBMS_JOB.SUBMIT(job,'TEST_WARN_PROC;',sysdate,'sysdate+30/(24*60)');
表示这个Job的执行频率是每隔30分钟,DBMS_JOB.SUBMIT(任务号,要执行的存储过程,下次执行的时间,每次间隔的时间)
sysdate+x/24 每隔x小时执行一次
sysdate+x/(24*60) 每隔x分钟执行一次
sysdate+x/(24*60*60) 每隔x秒执行一次
5>当报出错误信息的时候,其中指出的行号说明如下:
行号的计数从关键字DECLARE开始,如果没有则BEGIN语句的行号为1