更新日期:2024年09月11日
触发操作是当触发事件发生时执行的 SQL 语句。触发操作可以由 INSERT 、DELETE 、
UPDATE 、EXECUTE FUNCTION 和 EXECUTE PROCEDURE 语句组成。但是,除了指
定要执行什么操作外,还必须就触发语句何时执行这些操作。您有以下选择:
在触发语句执行之前
在触发语句执行之后
针对触发语句作用的每一行
表上的单个触发器可以为上述每一时间定义操作。
要定义触发操作,指定该操作何时发生,然后提供要执行的 SQL 语句,可使用关键字
BEFORE 、AFTER 或 FOR EACH ROW 指定该操作何时发生。然后是括在圆括号中的触
发操作。下面的触发操作定义指定在触发语句之前执行 SPL 例程 upd_items_p1 :
BEFORE(EXECUTE PROCEDURE upd_items_p1) -- a BEFORE action
对标识符的引用可以通过作用域和可见度来进行解析。
l
作用域:引用标识符的程序单元区域。
l
可见度:一个标识符只有在他的作用域内才能可见。可以在作用域内不使用限定
词而直接引用。
如下图:
GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 14 -
声明的标识符对于所在块就是本地的,对于子块就是全局的。如果全局标识符在子块
中重新定义,那么两个变量在子块的作用域都是存在的,但只有本地标识符是可见的,如
果这时候想引用全局标识符,就要加限定符。虽然不能再同一块中两次声明同一标识符,
但可以在不同的块中声明同一标识符。这两个标识符是相互独立的,互不影响。但一个块
中不能引用另一同级别块中的变量。因为对他而言,同级块中的标识符既不是本地也不是
全局的。
--Outer block:
DECLARE
a CHAR; -- Scope of a (CHAR) begins
b REAL; -- Scope of b begins
BEGIN
-- Visible: a (CHAR), b
-- First sub-block:
GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 15 -
DECLARE
a INTEGER; -- Scope of a (INTEGER) begins
c REAL; -- Scope of c begins
BEGIN
-- Visible: a (INTEGER), b, c
NULL;
END; -- Scopes of a (INTEGER) and c end
-- Second sub-block:
DECLARE
d REAL; -- Scope of d begins
BEGIN
-- Visible: a (CHAR), b, d
NULL;
END; -- Scope of d ends
-- Visible: a (CHAR), b
END; -- Scopes of a (CHAR) and b end
<
DECLARE
birthdate DATE := TO_DATE('09-AUG-70', 'DD-MON-YY');
BEGIN
DECLARE
birthdate DATE := TO_DATE('29-SEP-70', 'DD-MON-YY');
BEGIN
IF birthdate = outer.birthdate THEN
DBMS_OUTPUT.PUT_LINE ('Same Birthday');
ELSE
DBMS_OUTPUT.PUT_LINE ('Different Birthday');
END IF;
END;
END;
--Result:
--Different Birthday