動態複合陳述式
動態複合陳述式與 SQL 程序類似,不同之處在於它不需要建立永久物件。 例如,動態複合陳述式可用來將邏輯新增至 Script。
當執行動態複合陳述式時,它具有建立、執行及捨棄程式的額外負擔。 由於此額外負擔, SQL 程序應該用於需要經常執行陳述式的狀況。 動態複合陳述式沒有輸入或輸出參數; 您可以改用廣域變數來傳遞輸入值和回覆值。
假設您有一個 Script 需要設定包含常數值的表格。 例如,您有一個表格有一列代表一年中的每一天 (介於 1 到 366 之間的整數)。
CREATE TABLE day_numbers (day_value INT);
如果您不知道表格包含所有正確的值,則需要刪除所有列並重新插入它們。 透過在 Script 中引入複合 (動態) 陳述式,當表格已正確建置時,它不需要重新移入。
BEGIN
DECLARE day_count INT;
DECLARE unique_day_count INT DEFAULT 0;
DECLARE insert_cnt INT;
DECLARE CONTINUE HANDLER FOR SQLSTATE VALUE '42704'
/* Handle table does not exist error */
CREATE TABLE day_numbers (day_value INT);
SELECT COUNT(DISTINCT day_value) , COUNT(day_value)
INTO unique_day_count, day_count
FROM day_numbers;
IF day_count = 366 AND unique_day_count = 366 THEN
BEGIN END; /* Table correctly populated */
ELSE
BEGIN
DELETE FROM day_numbers; /* Remove all rows */
SET insert_cnt = 1;
WHILE insert_cnt < 367 DO
INSERT INTO day_numbers VALUES insert_cnt;
SET insert_cnt = insert_cnt + 1;
END WHILE;
END;
END IF;
END;