从下面这个例子中可以看出PL/SQL语法的一般规则:
1. PL/SQL中语句以分号(;)结尾;
2. 开始程序块的PL/SQL语句(如IF…或BEGIN语句)没有分句;
3. 文本值括在单引号(‘ ‘)内,而不是(“ “);
4. 过程只允许最后有一个出口;
5. PL/SQL程序可以分为三个部分;
6. DECLARE部分用于变量、常量、函数、过程、Cursor;
7. BEGIN部分包含PL/SQL块中要执行的代码 用于程序处理,其中可以调用函数、过程;
8. Exception 部分用于出错处理。
例1:
declare
i number:=0; /*声明变量井给初值*/
t number:=1;
-- 另一种方式初始化赋值
-- i2 number default 0;
-- t2 number default 1;
-- 初始化常量
-- i3 constant number := 0;
-- i4 constant number := 1;
error_message exception; /*声明一个出错处理*/
begin
for t in 1..100 loop
i:=i+t;
DBMS_OUTPUT.PUT_LINE(i);
end loop;
if i>5050 then
--raise error_message; /*引发错误处理*/
DBMS_OUTPUT.PUT_LINE('i变量大于'||i);
elsif i<5050 then
DBMS_OUTPUT.PUT_LINE('i变量小于'||i);
else
DBMS_OUTPUT.PUT_LINE('i变量等于'||i);
end if;
exception
when error_message then
DBMS_OUTPUT.PUT_LINE('exception块');
end;
从下面这个例子中可以看出方法的声明和调用
-- 方法声明的语法
function function_name(parameter type)return type is -- 方法声明头部 指定返回类型
…declare variant -- 变量定义处
begin
… --方法逻辑处理处
end function_name; -- 方法结束例2:
declare
i number :=1;
p number :=1;
function testOne(j number)return number is /* 声明方法testOne,并且指明返回值为number类型 */
t_num number := 0;
begin
t_num:=t_num+j;
return t_num;
end testOne; /* 声明方法testOne 结束 */
begin
while i<=10 loop
i:=i+1;
p:=testOne(i); /* 调用方法testOne,将返回值传递到变量P */
DBMS_OUTPUT.put_line('p输出'||p);
end loop;
end;
从下面的例子可以看出过程的声明和调用
声明方法的语法:
procedure procedure_name(parameter IN type) is
…declare variant --变量声明
begin -- 方法核心内容
…
…
exception --异常处理
…
…
end procedure_name;
例3:
declare
i number:=1; /*声明一个循环初始值*/
procedure pro_fun(j number) is /*定义一个过程*/
y number := 0; /*声明一个局部变量*/
begin
y:=j; /*将方法参数赋值y*/
DBMS_OUTPUT.put_line(y);
end pro_fun; /*过程声明结束*/
begin
for i in 1..100 loop
pro_fun(i); /*循环调用过程方法*/
end loop;
end;
建立内嵌函数
语法如下:
CREATE [OR REPLACE] FUNCTION function_name
[(argment [ { IN| IN OUT }] type,
argment [ { IN | OUT | IN OUT } ] type]
RETURN return_type
{ IS | AS }
BEGIN
FUNCTION_body
EXCEPTION
其它语句
END;
创建过程语法:
CREATE [OR REPLACE] PROCEDURE Procedure_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
{ IS | AS }
BEGIN
EXCEPTION
END;
调用过程:
EXEC[UTE] Procedure_name( parameter1, parameter2…);
创建触发器语法:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF column [, column …]]}
ON {[schema.] table_name | [schema.] view_name}
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
trigger_body;