teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

修正

2019/07/18 05:03

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
File without changes

6

修正

2019/07/18 05:03

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
@@ -39,6 +39,7 @@
39
39
  ```SQL
40
40
  CREATE TABLE mst
41
41
  (
42
+ memberid VARCHAR(9999),
42
43
  period VARCHAR(9999),
43
44
  cd VARCHAR(9999),
44
45
  sort_num VARCHAR(9999)
@@ -56,12 +57,12 @@
56
57
  )
57
58
  ```
58
59
  mst
59
- |period|cd|sort_num|
60
+ |memberid|period|cd|sort_num|
60
- |--|--|--|
61
+ |--|--|--|--|
61
- |201804|00401|0|
62
+ |0001|201804|00401|0|
62
- |201804|00501|8|
63
+ |0002|201804|00501|8|
63
- |201806|00401|14|
64
+ |0001|201806|00401|14|
64
- |201807|00702|52|
65
+ |0003|201807|00702|52|
65
66
 
66
67
  value_table
67
68
  |memberid|period|category_cd|variable_cd|value|

5

修正

2019/07/18 04:47

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,5 @@
1
1
  RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
  ```SQL
3
- ここに言語を入力
4
3
  CREATE OR REPLACE PROCEDURE sp_test
5
4
  (start_period varchar, end_period varchar)
6
5
  AS $$

4

修正

2019/07/18 04:43

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,6 @@
1
1
  RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
+ ```SQL
2
- ```ここに言語を入力
3
+ ここに言語を入力
3
4
  CREATE OR REPLACE PROCEDURE sp_test
4
5
  (start_period varchar, end_period varchar)
5
6
  AS $$
@@ -15,8 +16,8 @@
15
16
  ,COALESCE(t2.value,\'0\') as value
16
17
  ,t1.sort_num
17
18
  FROM
18
- a t1
19
+ mst t1
19
- LEFT JOIN b t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
20
+ LEFT JOIN value_table t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
20
21
  WHERE t1.sort_num <> \'0\'
21
22
  AND t1.period BETWEEN start_period AND end_period
22
23
  )
@@ -34,10 +35,52 @@
34
35
  --呼び出し
35
36
  CALL sp_test('201804','201809');
36
37
  ```
38
+ #テーブル
37
39
 
40
+ ```SQL
41
+ CREATE TABLE mst
42
+ (
43
+ period VARCHAR(9999),
44
+ cd VARCHAR(9999),
45
+ sort_num VARCHAR(9999)
46
+ );
47
+ ```
48
+
49
+ ```SQL
50
+ CREATE TABLE value_table
51
+ (
52
+ memberid VARCHAR(9999) ,
53
+ period VARCHAR(9999) ,
54
+ category_cd VARCHAR(9999) ,
55
+ variable_cd VARCHAR(9999) ,
56
+ value VARCHAR(9999)
57
+ )
58
+ ```
59
+ mst
60
+ |period|cd|sort_num|
61
+ |--|--|--|
62
+ |201804|00401|0|
63
+ |201804|00501|8|
64
+ |201806|00401|14|
65
+ |201807|00702|52|
66
+
67
+ value_table
68
+ |memberid|period|category_cd|variable_cd|value|
69
+ |--|--|--|--|--|
70
+ |0001|201804|004|01|50
71
+ |0002|201804|005|01|30
72
+ |0003|201806|004|01|20
73
+ |0004|201807|007|02|10
74
+
75
+
76
+
77
+
38
78
  エラー内容
39
- 42703: column "start_period" does not exist in a
79
+ 42703: column "start_period" does not exist in t1, t2, unnamed_join
40
80
 
81
+
82
+
83
+
41
84
  UNLOAD文のSQL内にCALLで指定した値を代入することは可能でしょうか?
42
85
  どなたかご教示いただけると幸いです。
43
86
  宜しくお願い致します。

3

修正

2019/07/18 04:42

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
  ```ここに言語を入力
3
- CREATE OR REPLACE PROCEDURE test
3
+ CREATE OR REPLACE PROCEDURE sp_test
4
4
  (start_period varchar, end_period varchar)
5
5
  AS $$
6
6
  BEGIN
@@ -32,7 +32,7 @@
32
32
  END;
33
33
  $$ LANGUAGE plpgsql;
34
34
  --呼び出し
35
- CALL wowdmp.sp_test('201804','201809');
35
+ CALL sp_test('201804','201809');
36
36
  ```
37
37
 
38
38
  エラー内容

2

修正

2019/07/18 04:21

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
@@ -1,1 +1,1 @@
1
- PL/SQL UNLOAD文の中に変数を入れたい
1
+ PL/pgSQL UNLOAD文の中に変数を入れたい
body CHANGED
@@ -1,23 +1,36 @@
1
- PL/SQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOD文の中ではカラムとして扱われてしまいます。
1
+ RedshiftにPL/pgSQLでUNLOAD文を登録しているのですが、CALLで指定した変数がUNLOAD文の中ではカラムとして扱われてしまいます。
2
2
  ```ここに言語を入力
3
- CREATE OR REPLACE PROCEDURE sp_test
3
+ CREATE OR REPLACE PROCEDURE test
4
4
  (start_period varchar, end_period varchar)
5
5
  AS $$
6
6
  BEGIN
7
7
 
8
8
  UNLOAD('
9
+ WITH middle_table AS
10
+ (
9
11
  SELECT
12
+ t1.period
13
+ ,t1.memberid
10
- ~
14
+ ,t1.cd
15
+ ,COALESCE(t2.value,\'0\') as value
16
+ ,t1.sort_num
11
17
  FROM
12
- a
13
- WHERE
18
+ a t1
19
+ LEFT JOIN b t2 ON t1.memberid = t2.memberid and t1.period = t2.period and t1.cd = t2.category_cd || t2.variable_cd
14
- ~
20
+ WHERE t1.sort_num <> \'0\'
15
- AND period BETWEEN start_period AND end_period;'
21
+ AND t1.period BETWEEN start_period AND end_period
22
+ )
23
+ SELECT
24
+ period
25
+ ,memberid
26
+ ,LISTAGG(value,\',\') within group (order by sort_num::int) as value
27
+ FROM
28
+ middle_table
29
+ GROUP BY
30
+ 1,2')
16
- TO 'xxxx' CREDENTIALS 'aws_access_key_id=yyyy;aws_secret_access_key=zzzz' delimiter ',' GZIP PARALLEL OFF;
31
+ TO 'xxx' CREDENTIALS 'aws_access_key_id=yyy;aws_secret_access_key=zzz' delimiter ',' GZIP PARALLEL OFF;
17
-
18
32
  END;
19
33
  $$ LANGUAGE plpgsql;
20
-
21
34
  --呼び出し
22
35
  CALL wowdmp.sp_test('201804','201809');
23
36
  ```

1

修正

2019/07/18 04:20

投稿

Toshi_1995
Toshi_1995

スコア40

title CHANGED
File without changes
body CHANGED
File without changes