質問編集履歴

2

テストコード記載

2020/12/06 14:10

投稿

FujiCandy
FujiCandy

スコア13

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,111 @@
107
107
  A,0100
108
108
 
109
109
  B,0200
110
+
111
+
112
+
113
+ 今回の知りたかった場所の実装はできました。
114
+
115
+ コミットとロールバックテストはできてませんが、こんな感じでサンプルテスト。
116
+
117
+ ```ここに言語を入力
118
+
119
+ create table raw (id int,primary key(id));
120
+
121
+ insert into raw values(1),(2),(3);
122
+
123
+ create table tmp (id int,primary key(id));
124
+
125
+ create table hon (id int,primary key(id));
126
+
127
+
128
+
129
+ delimiter //
130
+
131
+
132
+
133
+ DROP PROCEDURE IF EXISTS ABC;
134
+
135
+ truncate table tmp;
136
+
137
+
138
+
139
+ CREATE PROCEDURE `ABC`()
140
+
141
+ Block1: begin
142
+
143
+ declare v_done int default 0;
144
+
145
+ declare v_id int;
146
+
147
+ declare dummy int default 0;
148
+
149
+ declare v_cur cursor for select * from raw;
150
+
151
+ declare continue handler for sqlstate '02000' set v_done = 1;
152
+
153
+
154
+
155
+ Start transaction;
156
+
157
+
158
+
159
+ open v_cur;
160
+
161
+ fetch v_cur into v_id;
162
+
163
+ while v_done != 1 do
164
+
165
+ if v_id <> 3 then
166
+
167
+ SET dummy = 0;
168
+
169
+ insert into tmp value (v_id) ON DUPLICATE KEY UPDATE id = v_id;
170
+
171
+ else
172
+
173
+ SET dummy = 0;
174
+
175
+ Block2: begin
176
+
177
+ declare v2_done int default 0;
178
+
179
+ declare v2_id int;
180
+
181
+ declare v2_cur cursor for select * from tmp;
182
+
183
+ declare continue handler for sqlstate '02000' set v2_done = 1;
184
+
185
+ open v2_cur;
186
+
187
+ fetch v2_cur into v2_id;
188
+
189
+ while v2_done != 1 do
190
+
191
+ insert into hon value (v2_id) ON DUPLICATE KEY UPDATE id = v2_id;
192
+
193
+ fetch v2_cur into v2_id;
194
+
195
+ end while;
196
+
197
+ End Block2;
198
+
199
+ end if;
200
+
201
+ fetch v_cur into v_id;
202
+
203
+ end while;
204
+
205
+
206
+
207
+ close v_cur;
208
+
209
+ COMMIT;
210
+
211
+ end Block1;
212
+
213
+ //
214
+
215
+ delimiter ;
216
+
217
+ ```

1

具体例の記載をしました。

2020/12/06 14:10

投稿

FujiCandy
FujiCandy

スコア13

test CHANGED
File without changes
test CHANGED
@@ -12,23 +12,9 @@
12
12
 
13
13
 
14
14
 
15
- データとしては以下の形式で、TBL内にいくつかの塊があってそれごとに処理するというものです。
15
+ TBL内にいくつかの塊があってそれごとに処理するというものです。
16
16
 
17
- 塊1,2020/12/01,1,AAA,09:00
17
+ ※最下部に具体データと処理概要を記載
18
-
19
- 塊1,2020/12/01,2,AAA,10:00
20
-
21
- 塊1,2020/12/01,3,AAA,11:00
22
-
23
- 塊1,2020/12/01,2,BBB,12:00
24
-
25
- 塊1,2020/12/01,3,BBB,13:00
26
-
27
- 塊1,2020/12/01,4,BBB,14:00
28
-
29
- 塊2,2020/12/01,1,BBB,09:00 …ここから別の塊
30
-
31
- ・・・続く。
32
18
 
33
19
 
34
20
 
@@ -67,3 +53,57 @@
67
53
  コミット
68
54
 
69
55
  ```
56
+
57
+
58
+
59
+ データの例示が難しいので、処理概要も含めて具体的に記載します。
60
+
61
+ TBL_A(元データ) これが1つの塊です。必ず区分は1,4はあって1塊。
62
+
63
+ 日付,時刻,区分,種別
64
+
65
+ 20201205,0900,1,
66
+
67
+ 20201205,1000,2,A
68
+
69
+ 20201205,1100,3,A
70
+
71
+ 20201205,1200,2,A
72
+
73
+ 20201205,1300,3,B
74
+
75
+ 20201205,1500,2,B
76
+
77
+ 20201205,1700,3,B
78
+
79
+ 20201205,1800,4,
80
+
81
+ 日付違いが続く
82
+
83
+
84
+
85
+ 処理概要
86
+
87
+ 1.区分3→2の時間をそれぞれ求める。 A:1h B:2h
88
+
89
+ 2.区分2→3のすべての合計を求めて、種別数で割る。1h + 1h + 2h = 4h / 2 = 2h
90
+
91
+ 1に対して2を足しこみ、データを投入する。
92
+
93
+
94
+
95
+ 最終結果(TBL_B)
96
+
97
+ 20201205,A,0300
98
+
99
+ 20201205,B,0400
100
+
101
+
102
+
103
+ tmpとしては、
104
+
105
+ 1の処理を以下のように保持し、2の結果をそれぞれ足しこむという処理になります。
106
+
107
+ A,0100
108
+
109
+ B,0200