質問編集履歴
5
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
viewの作成でエラーが発生します
|
test
CHANGED
@@ -1,239 +1,118 @@
|
|
1
|
-
function内で、
|
1
|
+
function内で、viewを作成したいのですが、エラーが出てしまいます。
|
2
|
-
|
3
|
-
view作成時に引数は使用できないのでしょうか?
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
2
|
|
9
3
|
呼び出し元から渡される引数からviewを作成することは必須ですが、
|
10
|
-
|
11
4
|
functionの利用は必須ではありません。
|
12
5
|
|
13
|
-
|
14
|
-
|
15
6
|
試したことは以下の通りです。
|
16
|
-
|
17
7
|
①viewの作成時に引数を使用。
|
18
|
-
|
19
8
|
②execute formatを使用。
|
20
|
-
|
21
9
|
③return queryでデータを取得し、取得したデータをもとにviewを作成。
|
22
10
|
|
23
11
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
12
|
ソースは以下の通りです。
|
28
|
-
|
29
13
|
```ここに言語を入力
|
30
|
-
|
31
14
|
--①〜③共通
|
32
|
-
|
33
15
|
--データを取得するテーブル
|
34
|
-
|
35
16
|
create table test(
|
36
|
-
|
37
17
|
test_id numeric,
|
38
|
-
|
39
18
|
test_name text,
|
40
|
-
|
41
19
|
test_target date
|
42
|
-
|
43
20
|
);
|
44
21
|
|
45
|
-
|
46
|
-
|
47
22
|
insert into test values(1,'target',cast('2022/01/01' as date));
|
48
|
-
|
49
23
|
insert into test values(2,'not_target',cast('2022/01/31' as date));
|
50
|
-
|
51
24
|
```
|
52
25
|
|
53
|
-
|
54
|
-
|
55
26
|
--①の処理を行うfunction
|
56
|
-
|
57
27
|
```ここに言語を入力
|
58
|
-
|
59
28
|
CREATE OR REPLACE FUNCTION fnc_main(p_date date)
|
60
|
-
|
61
29
|
RETURNS integer
|
62
|
-
|
63
30
|
LANGUAGE plpgsql
|
64
|
-
|
65
31
|
AS $function$
|
66
|
-
|
67
|
-
|
68
32
|
|
69
33
|
declare
|
70
34
|
|
71
|
-
|
72
|
-
|
73
35
|
begin
|
74
|
-
|
75
36
|
create or replace view view_test as
|
76
|
-
|
77
37
|
select test_id,test_name
|
78
|
-
|
79
38
|
from test
|
80
|
-
|
81
39
|
where test_target = p_date;
|
82
40
|
|
83
|
-
|
84
|
-
|
85
41
|
return 0;
|
86
|
-
|
87
42
|
end;
|
88
43
|
|
89
44
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
45
|
/** select fnc_main(cast('2022/01/01' as date)) を
|
94
|
-
|
95
46
|
実行すると下記エラー
|
96
|
-
|
97
47
|
Query 1 ERROR: ERROR: column "p_date" does not exist
|
98
|
-
|
99
48
|
LINE 4: where test_target = p_date
|
100
|
-
|
101
49
|
^
|
102
|
-
|
103
50
|
QUERY: create or replace view view_test as
|
104
|
-
|
105
51
|
select test_id,test_name
|
106
|
-
|
107
52
|
from test
|
108
|
-
|
109
53
|
where test_target = p_date
|
110
|
-
|
111
54
|
CONTEXT: PL/pgSQL function fnc_main(date) line 8 at SQL statement
|
112
|
-
|
113
55
|
**//
|
114
56
|
|
115
57
|
|
58
|
+
$function$
|
59
|
+
```
|
60
|
+
--②の処理を行うfunction
|
61
|
+
```ここに言語を入力
|
62
|
+
CREATE OR REPLACE FUNCTION fnc_main2(p_date date)
|
63
|
+
RETURNS integer
|
64
|
+
LANGUAGE plpgsql
|
65
|
+
AS $function$
|
66
|
+
|
67
|
+
declare
|
68
|
+
|
69
|
+
begin
|
70
|
+
execute format(
|
71
|
+
'create or replace view view_test as'
|
72
|
+
' select test_id,test_name'
|
73
|
+
' from test'
|
74
|
+
' where test_target = $1')
|
75
|
+
using p_date;
|
76
|
+
|
77
|
+
return 0;
|
116
78
|
|
117
79
|
|
80
|
+
/** select fnc_main2(cast('2022/01/01' as date)) を
|
81
|
+
実行すると下記エラー
|
82
|
+
Query 1 ERROR: ERROR: there is no parameter $1
|
83
|
+
LINE 1: ...as select test_id,test_name from test where test_target = $1
|
84
|
+
^
|
85
|
+
QUERY: create or replace view view_test as select test_id,test_name from test where test_target = $1
|
86
|
+
CONTEXT: PL/pgSQL function fnc_main3(date) line 7 at EXECUTE
|
87
|
+
**//
|
88
|
+
|
89
|
+
end;
|
118
90
|
|
119
91
|
$function$
|
120
92
|
|
121
93
|
```
|
122
94
|
|
123
|
-
--
|
95
|
+
--③の処理を行うfunction
|
124
|
-
|
125
96
|
```ここに言語を入力
|
126
|
-
|
127
|
-
CREATE OR REPLACE FUNCTION fnc_main
|
97
|
+
CREATE OR REPLACE FUNCTION fnc_main3(p_date date)
|
128
|
-
|
129
|
-
RETURNS inte
|
98
|
+
RETURNS table(out_test_id numeric, out_test_name text)
|
130
|
-
|
131
99
|
LANGUAGE plpgsql
|
132
|
-
|
133
100
|
AS $function$
|
134
|
-
|
135
|
-
|
136
101
|
|
137
102
|
declare
|
138
103
|
|
139
|
-
|
140
|
-
|
141
104
|
begin
|
142
105
|
|
143
|
-
e
|
106
|
+
return query(
|
107
|
+
select test_id,test_name
|
108
|
+
from test
|
109
|
+
where test_target = p_date);
|
144
110
|
|
145
|
-
'create or replace view view_test as'
|
146
|
-
|
147
|
-
' select test_id,test_name'
|
148
|
-
|
149
|
-
' from test'
|
150
|
-
|
151
|
-
' where test_target = $1')
|
152
|
-
|
153
|
-
using p_date;
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
return 0;
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
/** select fnc_main
|
111
|
+
/** select fnc_main3(cast('2022/01/01' as date)) を
|
164
|
-
|
165
|
-
実行すると下記エラー
|
166
|
-
|
167
|
-
Query 1 ERROR: ERROR: there is no parameter $1
|
168
|
-
|
169
|
-
LINE 1: ...as select test_id,test_name from test where test_target = $1
|
170
|
-
|
171
|
-
^
|
172
|
-
|
173
|
-
QUERY: create or replace view view_test as select test_id,test_name from test where test_target = $1
|
174
|
-
|
175
|
-
|
112
|
+
データは取得できるけれど、呼び出し元(function)で、returnされたデータからviewを作成できないのではないか?
|
176
|
-
|
177
113
|
**//
|
178
|
-
|
179
|
-
|
180
114
|
|
181
115
|
end;
|
182
116
|
|
183
|
-
|
184
|
-
|
185
117
|
$function$
|
186
|
-
|
187
|
-
|
188
|
-
|
189
118
|
```
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
--③の処理を行うfunction
|
194
|
-
|
195
|
-
```ここに言語を入力
|
196
|
-
|
197
|
-
CREATE OR REPLACE FUNCTION fnc_main3(p_date date)
|
198
|
-
|
199
|
-
RETURNS table(out_test_id numeric, out_test_name text)
|
200
|
-
|
201
|
-
LANGUAGE plpgsql
|
202
|
-
|
203
|
-
AS $function$
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
declare
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
begin
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
return query(
|
216
|
-
|
217
|
-
select test_id,test_name
|
218
|
-
|
219
|
-
from test
|
220
|
-
|
221
|
-
where test_target = p_date);
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
/** select fnc_main3(cast('2022/01/01' as date)) を
|
226
|
-
|
227
|
-
データは取得できるけれど、呼び出し元(function)で、returnされたデータからviewを作成できないのではないか?
|
228
|
-
|
229
|
-
**//
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
end;
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
$function$
|
238
|
-
|
239
|
-
```
|
4
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
呼び出し元から渡される引数からviewを作成することは必須ですが、
|
8
10
|
|
9
11
|
functionの利用は必須ではありません。
|
3
誤字
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
引数を使用したviewの動的作成
|
1
|
+
引数を使用したviewの動的作成でエラーが発生します
|
test
CHANGED
File without changes
|
2
誤字
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
viewの動的作成方法
|
1
|
+
引数を使用したviewの動的作成方法
|
test
CHANGED
File without changes
|
1
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -192,7 +192,7 @@
|
|
192
192
|
|
193
193
|
```ここに言語を入力
|
194
194
|
|
195
|
-
CREATE OR REPLACE FUNCTION fnc_main
|
195
|
+
CREATE OR REPLACE FUNCTION fnc_main3(p_date date)
|
196
196
|
|
197
197
|
RETURNS table(out_test_id numeric, out_test_name text)
|
198
198
|
|