CREATE PROCEDURE
SQL 操作を実行し、結果を返すストアドプロシージャを定義します。
構文
CREATE PROCEDURE <procedure_name>(<parameter_name> <data_type>, ...)
RETURNS <return_data_type> [NOT NULL]
LANGUAGE <language>
[ COMMENT '<comment>' ]
AS $$
BEGIN
<procedure_body>
RETURN <return_value>; -- Use to return a single value
-- OR
RETURN TABLE(<select_query>); -- Use to return a table
END;
$$;
アクセス制御要件
プロシージャを作成するには、操作を実行するユーザーまたは current_role が CREATE PROCEDURE 権限 を持っている必要があります。
例
この例では、重量をキログラム(kg)からポンド(lb)に変換するストアドプロシージャを定義します。
CREATE PROCEDURE convert_kg_to_lb(kg DECIMAL(4, 2))
RETURNS DECIMAL(10, 2)
LANGUAGE SQL
COMMENT = 'Converts kilograms to pounds'
AS $$
BEGIN
RETURN kg * 2.20462;
END;
$$;
ループ、条件、および動的変数を使用するストアドプロシージャを定義することもできます。
CREATE OR REPLACE PROCEDURE loop_test()
RETURNS INT
LANGUAGE SQL
COMMENT = 'loop test'
AS $$
BEGIN
LET x RESULTSET := select number n from numbers(10);
LET sum := 0;
FOR x IN x DO
FOR batch in 0 TO x.n DO
IF batch % 2 = 0 THEN
sum := sum + batch;
ELSE
sum := sum - batch;
END IF;
END FOR;
END FOR;
RETURN sum;
END;
$$;
-- Grant ACCESS PROCEDURE Privilege TO role test
GRANT ACCESS PROCEDURE ON PROCEDURE loop_test() to role test;
CALL PROCEDURE loop_test();
┌─Result─┐
│ -5 │
└────────┘