動態複合陳述式

動態複合陳述式與 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;