回答編集履歴

1

追記

2018/01/15 09:15

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
@@ -53,3 +53,175 @@
53
53
  『 ここでSELECT文発行(略) 』 の結果を配列に入れたい、ということでしょうか?
54
54
 
55
55
  それとも前述のカーソルの扱いについて何か問題があったのでしょうか。
56
+
57
+
58
+
59
+
60
+
61
+ # 追記
62
+
63
+
64
+
65
+ > IF分の中でさらにSELECT文を発行し、WHERE句として使用する
66
+
67
+
68
+
69
+ この SELECT したものは何に使うのでしょうか。PRINT で確認するだけ?
70
+
71
+
72
+
73
+ FETCH したものをそのまま判定に使ったり WHERE句 で指定したりするだけなら
74
+
75
+ 配列に詰めないで WHILE の中でそのまま処理を書いてしまえば良い気もしますが。
76
+
77
+
78
+
79
+ 以下 コピペで動くはず・・・
80
+
81
+ (2つ目のSELECTは適当です)
82
+
83
+ (TAB_A, TAB_B はテスト実行用にサブクエリを書いていますが、実際には普通にテーブルを指定すれば良いです)
84
+
85
+ ```sql
86
+
87
+ BEGIN
88
+
89
+ --カーソルの値を取得する変数宣言
90
+
91
+ DECLARE @W_COL1 varchar(50)
92
+
93
+ DECLARE @W_COL2 decimal(18,0)
94
+
95
+
96
+
97
+ --2つ目の SELECT の結果を入れる変数
98
+
99
+ DECLARE @W_HOGE varchar(100)
100
+
101
+
102
+
103
+ --カーソル定義
104
+
105
+ DECLARE CUR_AAA CURSOR LOCAL FOR
106
+
107
+ SELECT COL1, COL2
108
+
109
+ FROM (
110
+
111
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 100) AS COL2 UNION ALL
112
+
113
+ SELECT 'bbb' AS COL1, CONVERT(decimal, 200) AS COL2 UNION ALL
114
+
115
+ SELECT 'ccc' AS COL1, CONVERT(decimal, 300) AS COL2 UNION ALL
116
+
117
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 10) AS COL2 UNION ALL
118
+
119
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 20) AS COL2
120
+
121
+ ) TAB_A
122
+
123
+ WHERE TAB_A.COL1 IN ('aaa', 'ccc')
124
+
125
+
126
+
127
+ --カーソルオープン
128
+
129
+ OPEN CUR_AAA;
130
+
131
+
132
+
133
+ --最初の1行目を取得して変数へ値をセット
134
+
135
+ FETCH NEXT FROM CUR_AAA INTO @W_COL1,@W_COL2;
136
+
137
+
138
+
139
+ --データの行数分ループ処理を実行する
140
+
141
+ WHILE @@FETCH_STATUS = 0
142
+
143
+ BEGIN
144
+
145
+
146
+
147
+ -- 確認用
148
+
149
+ PRINT 'FETCHしたもの:[' + @W_COL1 + '] [' + CONVERT(varchar, @W_COL2) + ']'
150
+
151
+
152
+
153
+ -- ★FETCH した値を判定条件に使用
154
+
155
+ IF @W_COL1 = 'aaa'
156
+
157
+ BEGIN
158
+
159
+ -- FETCH した値を元に別テーブルを SELECT
160
+
161
+ SELECT @W_HOGE = Hoge
162
+
163
+ FROM (
164
+
165
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 100) AS COL2, 'hoge1' AS Hoge UNION ALL
166
+
167
+ SELECT 'bbb' AS COL1, CONVERT(decimal, 200) AS COL2, 'hoge2' AS Hoge UNION ALL
168
+
169
+ SELECT 'ccc' AS COL1, CONVERT(decimal, 300) AS COL2, 'hoge3' AS Hoge UNION ALL
170
+
171
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 10) AS COL2, 'hoge4' AS Hoge UNION ALL
172
+
173
+ SELECT 'aaa' AS COL1, CONVERT(decimal, 20) AS COL2, 'hoge5' AS Hoge
174
+
175
+ ) TAB_B
176
+
177
+ WHERE TAB_B.COL1 = @W_COL1 --★WHERE句に使用
178
+
179
+ AND TAB_B.COL2 = @W_COL2 --★WHERE句に使用
180
+
181
+
182
+
183
+ -- 確認用
184
+
185
+ PRINT 'Hoge[' + @W_HOGE + ']'
186
+
187
+ END
188
+
189
+ ELSE
190
+
191
+ BEGIN
192
+
193
+ -- 確認用
194
+
195
+ PRINT '2つ目のSELECTは実行しません'
196
+
197
+ END
198
+
199
+
200
+
201
+ PRINT '----------'
202
+
203
+
204
+
205
+ --次の行のデータを取得して変数へ値をセット
206
+
207
+ FETCH NEXT FROM CUR_AAA INTO @W_COL1,@W_COL2;
208
+
209
+ END
210
+
211
+
212
+
213
+ --カーソルを閉じる
214
+
215
+ CLOSE CUR_AAA;
216
+
217
+ DEALLOCATE CUR_AAA;
218
+
219
+
220
+
221
+ END
222
+
223
+ ```
224
+
225
+
226
+
227
+ 参考までに。