動的複合ステートメント

動的複合ステートメントは、永続オブジェクトを作成する必要がないという点を除いて、SQL プロシージャーと似ています。 例えば、動的複合ステートメントを使用して、ロジックをスクリプトに追加できます。

動的複合ステートメントを実行すると、プログラムの作成、実行、および廃棄のオーバーヘッドが生じます。このオーバーヘッドのため、ステートメントを頻繁に実行する必要がある場合は、SQL プロシージャーを使用する必要があります。動的複合ステートメントには入出力パラメーターがありません。代わりに、グローバル変数を使用して入力値および戻り値を渡します。

定数値が含まれる表をセットアップする必要があるスクリプトがあるものとします。例えば、年の毎日に 1 行がある表があるとします (1 から 366 の整数)。

CREATE TABLE day_numbers (day_value INT)     

表にすべての正しい値が含まれているかが分からない場合、すべての行を削除してから、再び行を挿入する必要があります。スクリプトに複合 (動的) ステートメントを導入することで、表が既に正しく構築されている場合、データの再入力が不要になります。

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