SQL 过程主体
SQL 过程的主体包含一个或多个 SQL 语句。 在SQL程序体中,您还可以声明和使用变量、条件、返回代码、语句、游标和处理程序。
可在SQL程序主体中包含的语句
本机SQL过程的CREATE PROCEDURE语句包含一个SQL例程体 ,如 CREATE PROCEDURE语句(SQL - 本机过程 )中定义的那样。 SQL-routine-body的语法图将过程体定义为单个SQL语句。 SQL语句可以是SQL语句语法图中 SQL例程主体的SQL语句之一,也可以是SQL控制语句。 SQL程序语言(SQL PL )中的 SQL控制语句语法图标识了可指定的控制语句。
如果最外层的 SQL 语句是包含其他 SQL 语句的 SQL 控制语句 ,则本机 SQL 过程可以包含多个 SQL 语句。 这些语句被定义为SQL过程语句。 SQL程序语句(SQL PL )中的语法图标识了可在控制语句中指定的SQL语句。 SQL过程语句的语法注释阐明了本机SQL过程中允许的SQL语句。
示例
以下示例说明了如何确定 SQL 程序中是否允许使用 SQL 语句。
控制语句的语法图显示了SQL程序中需要使用分号的位置。 如果程序中只有一个非控制语句的语句,例如例1,则CREATE PROCEDURE语句中不包含分号。 如果程序包含多个语句,例如示例2,请使用分号分隔SQL程序中的SQL语句。 最外层的控制语句后不要加分号。
- 示例 1
UPDATE语句 (A) 是SQL语句,因为它在 SQL-routine-body的语法图中列出,所以是允许的。CREATE PROCEDURE UPDATE_SALARY_1 (IN EMPLOYEE_NUMBER CHAR(10), IN RATE DECIMAL(6,2)) LANGUAGE SQL MODIFIES SQL DATA DETERMINISTIC COMMIT ON RETURN YES UPDATE EMP A SET SALARY = SALARY * RATE WHERE EMPNO = EMPLOYEE_NUMBER- 示例 2
CREATE PROCEDURE GETWEEKENDS(IN MYDATES DATEARRAY, OUT WEEKENDS DATEARRAY) BEGIN A -- ARRAY INDEX VARIABLES DECLARE DATEINDEX, WEEKENDINDEX INT DEFAULT 1; B -- VARIABLE TO STORE THE ARRAY LENGTH OF MYDATES, -- INITIALIZED USING THE CARDINALITY FUNCTION. DECLARE DATESCOUNT INT; B SET DATESCOUNT = CARDINALITY(MYDATES); C -- FOR EACH DATE IN MYDATES, IF THE DATE IS A SUNDAY OR SATURDAY, -- ADD IT TO THE OUTPUT ARRAY NAMED "WEEKENDS" WHILE DATEINDEX <= DATESCOUNT DO D IF DAYOFWEEK(MYDATES[DATEINDEX]) IN (1, 7) THEN E SET WEEKENDS[WEEKENDINDEX] = MYDATES[DATEINDEX]; C SET WEEKENDINDEX = WEEKENDINDEX + 1; C END IF; SET DATEINDEX = DATEINDEX + 1; C END WHILE; END ASQL程序有以下关键字和语句:
- 关键字BEGIN和END (A) 表示复合语句的开始和结束。
- DECLARE语句 (B) 是复合语句的组成部分,用于在复合语句中定义SQL变量。
- SET赋值语句 (C) 是SQL控制语句,用于为SQL变量赋值。
- WHILE语句 (D) 和IF语句 (E) 是SQL控制语句。
复合语句是SQL控制语句。 SQL控制语句允许在SQL程序体中使用,因为 SQL控制语句列在CREATE PROCEDURE(SQL-native)语句的SQL程序体语法图中。