PL/SQL是对SQL的扩展。
SQL是描述性语言,PL/SQL给数据库加入了过程控制。平常所说的存储过程、函数、触发器都属于PL/SQL。对于创建存储过程,函数,触发器的创建,修改,Oracle也没有什么奇特之处.可以参照语法手册即可.Oracle PL/SQL提供了一些容易使用的特性:游标调用,Oracle提供了很多控制方式,如下方式比较简洁:
DECLARE
        a0 X.a0%TYPE;
        a1 X.a1%TYPE;
        CURSOR c IS SELECT * FROM X;
BEGIN
        FOR x0 IN c LOOP
                a0 := x0.a0;
                a1 := x0.a1;
        END LOOP;
END;简洁的原因:
x0不需要声明
在FOR语句时,游标自动打开
在出循环之后就自动关闭了
又注意到:
a0,a1的数据类型,说明与X表的a0,a1数据类型相同.这就是%TYPE的妙用了.
如果说明一个结构变量与X相同,可以用%ROWTYPE,如下:
x0 X%ROWTYPE
其实,程序中的x0就是X%ROWTYPE类型.在FETCH时放入了值.如果用OPEN显式操作,则可以:
FETCH INTO x0;
一次性将所有值放入.
%TYPE与%ROWTYPE的好处就在于:数据库的类型改变,程序的跟着变。a0 := x0.a0是将x0.a0的值赋给a0变量。x0是一个记录类型变量。可以如下定义记录类型:TYPE XType IS RECORD
(
    a0 VARCHAR2(16),
    a1 NUMBER
);
用Oracle,感觉UPDATE语句不太方便,不如SQL SERVER中有UPDATE ... FROM
不过,也有些解决办法:UPDATE (
    SELECT a.x, b.y
    FROM a, b
    WHERE a.k = b.k
)
SET a.x = a.x + b.y不过,要求: a.k,b.k必须是两个表中的唯一索引字段,不然出错.可以建立中间临时表(b表)的方式,将查到的数据集入临时表,然后再用以上的UPDATE语句修改(a表),就ok了.