回答編集履歴

1

訂正

2018/01/25 03:47

投稿

Orlofsky
Orlofsky

スコア16415

test CHANGED
@@ -8,13 +8,17 @@
8
8
 
9
9
  (
10
10
 
11
- STRING VARCHAR2(16) NOT NULL
11
+ COL_1 VARCHAR2(3) NOT NULL
12
+
13
+ , COL_2 VARCHAR2(8) NOT NULL
14
+
15
+ , COL_3 VARCHAR2(3) NOT NULL
12
16
 
13
17
  ) ;
14
18
 
15
- INSERT INTO TBL(STRING) VALUES('111,AAAABBBB,222') ;
19
+ INSERT INTO TBL(COL_1, COL_2, COL_3) VALUES('111', 'AAAABBBB', '222') ;
16
20
 
17
- INSERT INTO TBL(STRING) VALUES('111,CCCC,222') ;
21
+ INSERT INTO TBL(COL_1, COL_2, COL_3) VALUES('111', 'CCCC', '222') ;
18
22
 
19
23
  COMMIT ;
20
24
 
@@ -24,7 +28,7 @@
24
28
 
25
29
  2行に分けるか1行のままで良いかの条件をもっと明示できた方が良いです。
26
30
 
27
- とりあえず文字列の長さが 16バイトを条件とします。
31
+ ~~とりあえず文字列の長さが 16バイトを条件とします。~~
28
32
 
29
33
  結果もテキストファイルに出力しました。
30
34
 
@@ -52,7 +56,11 @@
52
56
 
53
57
  IS
54
58
 
55
- SELECT T.STRING
59
+ SELECT T.COL_1
60
+
61
+ , T.COL_2
62
+
63
+ , T.COL_3
56
64
 
57
65
  FROM TBL T ;
58
66
 
@@ -60,15 +68,15 @@
60
68
 
61
69
  FOR REC_T IN CUR_T LOOP
62
70
 
63
- IF LENGTH(REC_T.STRING) = 16 THEN
71
+ IF LENGTH(REC_T.COL_2) = 8 THEN -- COL_2が8バイトなら2行で出力
64
72
 
65
- DBMS_OUTPUT.PUT_LINE(SUBSTR(REC_T.STRING, 1, 8) || SUBSTR(REC_T.STRING, 13, 4));
73
+ DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || SUBSTR(REC_T.COL_2, 1, 4) || ',' || REC_T.COL_3) ;
66
74
 
67
- DBMS_OUTPUT.PUT_LINE(SUBSTR(REC_T.STRING, 1, 4) || SUBSTR(REC_T.STRING, 9, 8));
75
+ DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || SUBSTR(REC_T.COL_2, 5, 4) || ',' || REC_T.COL_3) ;
68
76
 
69
77
  ELSE
70
78
 
71
- DBMS_OUTPUT.PUT_LINE(REC_T.STRING) ;
79
+ DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || REC_T.COL_2 || ',' || REC_T.COL_3) ;
72
80
 
73
81
  END IF ;
74
82