AWS Redshiftでプロシージャを実行するサンプル

目次

サンプル 前提
  文字列を出力する
select intoで値を取得する
select intoで複数項目を取得する
select文でカーソル(cursor)とfetchとloopを使用する
returnで処理を終了する
NULLで処理を何もしない
プロシージャの一覧を表示する
プロシージャの内容を表示する

前提

 

文字列を出力する

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  str1 VARCHAR(20);
BEGIN
  str1 := 'hello world';
  RAISE INFO 'msg:%', STR1; --'msg:hello world
END;
$$
LANGUAGE plpgsql;

4行目は、変数を宣言しています。
6行目は、変数に値をセットしています。
7行目は、変数の値を出力します。コメントはハイフン2つ続けます。
%は、右の変数の値がセットされます。
10行目は、言語の指定で必要です。

プロシージャを実行する

上記で作成したプロシージャを実行するサンプルです。
call プロシージャ名()で実行します。

call test1()

クエリエディタ2から実行すると文字列が表示されます。

 

select intoで値を取得する

入力として数値を渡してsql intoで値を取得します。

CREATE OR REPLACE PROCEDURE test1(id1 int) 
AS $$
DECLARE
  str1 VARCHAR(20);
BEGIN
  select firstname into str1 from users
  where userid = id1;
  RAISE INFO 'msg:%', STR1; --'msg:Henry
END;
$$
LANGUAGE plpgsql;

1行目は、引数としてintの値を受け取ります。
6行目はselect intoで取得したfirstnameを右の変数のstr1にセットしています。
7行目は、外部から受け取った数値で条件を指定します。
8行目の%は、右の変数の値がセットされます。

プロシージャを実行する

上記のプロシージャを実行するサンプルです。
引数として13を指定しています。

call test1(13)

 

select intoで複数項目を取得する

CREATE OR REPLACE PROCEDURE test1(id1 int) 
AS $$
DECLARE
  str1 VARCHAR(20);
  str2 VARCHAR(20);  
BEGIN
  select firstname,lastname into str1,str2 from users
  where userid = id1;
  RAISE INFO 'msg:%,%', STR1,STR2; --'msg:Henry,Cochran
END;
$$
LANGUAGE plpgsql;

selectで取得する項目を複数にし、intoの後の変数も複数にすれば複数項目を取得できます。

 

select文でカーソル(cursor)とfetchとloopを使用する

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  cur1 CURSOR FOR
	select userid,firstname from users limit 10;
	user_rec RECORD;
BEGIN
  OPEN cur1;
  LOOP
    FETCH cur1 INTO user_rec;
      EXIT WHEN NOT FOUND;
    RAISE INFO '%,%', user_rec.userid , user_rec.firstname;
  END LOOP;
  CLOSE cur1;
END;
$$
LANGUAGE plpgsql;

4行目のCURSORで複数行を取得しています。
9,10行目のLOOPとFETCHで1行ずつ取り出しています。

プロシージャを実行する

上記で作成したプロシージャを実行するサンプルです。

call test1()

クエリエディタ2から実行すると文字列が表示されます。

 

returnで処理を終了する

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
  num1  int;
BEGIN
  num1 := 1;
  if num1 = 1 then
    RAISE INFO 'process1'; --'process1
    return;
  end if;
  RAISE INFO 'process2';
END;
$$
LANGUAGE plpgsql;

9行目は、returnです。このプロシージャの処理が終了します。
実行した場合、8行目の文字列が出力されます。
11行目の文字列は出力されません。

 

NULLで処理を何もしない

CREATE OR REPLACE PROCEDURE test1() 
AS $$
DECLARE
	num1  int;
BEGIN
  num1 := 1;
  if num1 = 1 then
     NULL;
  end if;
  RAISE INFO 'process2';--'process2
END;
$$
LANGUAGE plpgsql;

NULLを記述すると何もしません。
NULLがない場合でもエラーにはなりません。

 

プロシージャの一覧を表示する

SELECT routine_catalog,routine_schema,routine_name,routine_type
FROM information_schema.routines
WHERE routine_type = 'PROCEDURE';

以下のように表示されます。

 

プロシージャの内容を表示する

show procedure test1()

指定したプロシージャを表示します。

関連の記事

AWS Redshiftを作成・削除・実行結果を確認する

△上に戻る