回答編集履歴
1
訂正
answer
CHANGED
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
```SQL
|
|
4
4
|
CREATE TABLE TBL
|
|
5
5
|
(
|
|
6
|
-
|
|
6
|
+
COL_1 VARCHAR2(3) NOT NULL
|
|
7
|
+
, COL_2 VARCHAR2(8) NOT NULL
|
|
8
|
+
, COL_3 VARCHAR2(3) NOT NULL
|
|
7
9
|
) ;
|
|
8
|
-
INSERT INTO TBL(
|
|
10
|
+
INSERT INTO TBL(COL_1, COL_2, COL_3) VALUES('111', 'AAAABBBB', '222') ;
|
|
9
|
-
INSERT INTO TBL(
|
|
11
|
+
INSERT INTO TBL(COL_1, COL_2, COL_3) VALUES('111', 'CCCC', '222') ;
|
|
10
12
|
COMMIT ;
|
|
11
13
|
```
|
|
12
14
|
|
|
13
15
|
2行に分けるか1行のままで良いかの条件をもっと明示できた方が良いです。
|
|
14
|
-
とりあえず文字列の長さが 16バイトを条件とします。
|
|
16
|
+
~~とりあえず文字列の長さが 16バイトを条件とします。~~
|
|
15
17
|
結果もテキストファイルに出力しました。
|
|
16
18
|
|
|
17
19
|
```SQL
|
|
@@ -25,15 +27,17 @@
|
|
|
25
27
|
DECLARE
|
|
26
28
|
CURSOR CUR_T
|
|
27
29
|
IS
|
|
28
|
-
SELECT T.
|
|
30
|
+
SELECT T.COL_1
|
|
31
|
+
, T.COL_2
|
|
32
|
+
, T.COL_3
|
|
29
33
|
FROM TBL T ;
|
|
30
34
|
BEGIN
|
|
31
35
|
FOR REC_T IN CUR_T LOOP
|
|
32
|
-
IF LENGTH(REC_T.
|
|
36
|
+
IF LENGTH(REC_T.COL_2) = 8 THEN -- COL_2が8バイトなら2行で出力
|
|
33
|
-
DBMS_OUTPUT.PUT_LINE(
|
|
37
|
+
DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || SUBSTR(REC_T.COL_2, 1, 4) || ',' || REC_T.COL_3) ;
|
|
34
|
-
DBMS_OUTPUT.PUT_LINE(SUBSTR(REC_T.
|
|
38
|
+
DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || SUBSTR(REC_T.COL_2, 5, 4) || ',' || REC_T.COL_3) ;
|
|
35
39
|
ELSE
|
|
36
|
-
DBMS_OUTPUT.PUT_LINE(REC_T.
|
|
40
|
+
DBMS_OUTPUT.PUT_LINE(REC_T.COL_1 || ',' || REC_T.COL_2 || ',' || REC_T.COL_3) ;
|
|
37
41
|
END IF ;
|
|
38
42
|
END LOOP ;
|
|
39
43
|
END ;
|