RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
SQL
1CREATE OR REPLACE PROCEDURE sp_test 2(start_period varchar, end_period varchar) 3AS $$ 4BEGIN 5 6 UNLOAD(' 7 WITH middle_table AS 8 ( 9 SELECT 10 t1.period 11 ,t1.memberid 12 ,t1.cd 13 ,COALESCE(t2.value,\'0\') as value 14 ,t1.sort_num 15 FROM 16 mst t1 17 LEFT JOIN value_table t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd 18 WHERE t1.sort_num <> \'0\' 19 AND t1.period BETWEEN start_period AND end_period 20 ) 21 SELECT 22 period 23 ,memberid 24 ,LISTAGG(value,\',\') within group (order by sort_num::int) as value 25 FROM 26 middle_table 27 GROUP BY 28 1,2') 29 TO 'xxx' CREDENTIALS 'aws_access_key_id=yyy;aws_secret_access_key=zzz' delimiter ',' GZIP PARALLEL OFF; 30END; 31$$ LANGUAGE plpgsql; 32--呼び出し 33CALL sp_test('201804','201809');
#テーブル
SQL
1CREATE TABLE mst 2( 3 memberid VARCHAR(9999), 4 period VARCHAR(9999), 5 cd VARCHAR(9999), 6 sort_num VARCHAR(9999) 7);
SQL
1CREATE TABLE value_table 2( 3 memberid VARCHAR(9999) , 4 period VARCHAR(9999) , 5 category_cd VARCHAR(9999) , 6 variable_cd VARCHAR(9999) , 7 value VARCHAR(9999) 8)
mst
memberid | period | cd | sort_num |
---|---|---|---|
0001 | 201804 | 00401 | 0 |
0002 | 201804 | 00501 | 8 |
0001 | 201806 | 00401 | 14 |
0003 | 201807 | 00702 | 52 |
value_table
memberid | period | category_cd | variable_cd | value |
---|---|---|---|---|
0001 | 201804 | 004 | 01 | 50 |
0002 | 201804 | 005 | 01 | 30 |
0003 | 201806 | 004 | 01 | 20 |
0004 | 201807 | 007 | 02 | 10 |
エラー内容
42703: column "start_period" does not exist in t1, t2, unnamed_join
UNLOAD文のSQL内にCALLで指定した値を代入することは可能でしょうか?
どなたかご教示いただけると幸いです。
宜しくお願い致します。

回答1件
あなたの回答
tips
プレビュー