一次执行匿名块。
DO
[ ] [ ( ) ]
BEGIN [ ]
END
TABLE (
匿名块仅执行一次。在匿名块中还支持过程中支持的所有 SQLScript 语句。与过程不同,匿名块未在目录中创建相应的对象。
匿名块在单个步骤中定义和执行。因此,不需要执行 CREATE 或 DROP 等生命周期处理。匿名块的正文与过程主体类似。
要返回结果集,请使用 SELECT 语句,因为匿名块未定义任何参数。
对于输出参数,?是有效值,不能省略,否则无法绑定查询参数。对于输入参数,可以设置物理表的名称。对于标量输入参数,可以使用任何标量表达式,标量 UDF 除外。不支持 DEFAULT EMPTY 和 INOUT 参数。
执行一个匿名块,创建一个表并将值插入到该表中。
DO
BEGIN
DECLARE I INTEGER;
CREATE ROW TABLE TAB1 (I INTEGER);
FOR I IN 1..10 DO
INSERT INTO TAB1 VALUES (:I);
END FOR;
END;
执行匿名块并使用 SELECT 语句返回结果集。
DO
BEGIN
T1 = SELECT I, 10 AS J FROM TAB;
T2 = SELECT I, 20 AS K FROM TAB;
T3 = SELECT J, K FROM :T1, :T2 WHERE :T1.I = :T2.I;
SELECT * FROM :T3;
END;
执行调用其他过程的匿名块。
DO
BEGIN
T1 = SELECT * FROM TAB;
CALL PROC3(:T1, :T2);
SELECT * FROM :T2;
END;
执行包含异常处理器的匿名块。
DO
BEGIN
DECLARE I, J INTEGER;
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
IF ::SQL_ERROR_CODE = 288 THEN
DROP TABLE TAB;
CREATE ROW TABLE TAB (I INTEGER PRIMARY KEY);
ELSE
RESIGNAL;
END IF;
CREATE ROW TABLE TAB (I INTEGER PRIMARY KEY);
END;
FOR I in 1..3 DO
INSERT INTO TAB VALUES (:I);
END FOR;
IF :J <> 3 THEN
SIGNAL SQL_ERROR_CODE 10001;
END IF;
END;
执行使用 COMMIT 和 ROLLBACK 的匿名块。
DO
BEGIN
CREATE ROW TABLE TAB2 (K INT);
COMMIT;
DROP TABLE TAB;
CREATE ROW TABLE TAB (J INT);
ROLLBACK;
DELETE FROM TAB;
END;
执行调用过程以处理所选数据的匿名块。
DO
BEGIN
T1 = SELECT I, 10 AS J FROM TAB;
T2 = SELECT I, 20 AS K FROM TAB;
T3 = SELECT J, K FROM :T1, :T2 WHERE :T1.I = :T2.I;
CALL PROC3(:T3, T4);
SELECT * FROM :T4;
END;
执行运行循环的匿名块以将数据插入到表中。
DO
BEGIN
DECLARE I INTEGER;
FOR I in 1..3 DO
INSERT INTO TAB VALUES (:I);
END FOR;
END;
执行计算两个整数总和的匿名块。
DO (IN A INT => 1, IN B INT => ?, OUT C INT => ?)
BEGIN
C = :A + :B;
END;