質問するログイン新規登録

回答編集履歴

1

訂正

2018/01/25 03:47

投稿

Orlofsky
Orlofsky

スコア16419

answer CHANGED
@@ -3,15 +3,17 @@
3
3
  ```SQL
4
4
  CREATE TABLE TBL
5
5
  (
6
- STRING VARCHAR2(16) NOT NULL
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(STRING) VALUES('111,AAAABBBB,222') ;
10
+ INSERT INTO TBL(COL_1, COL_2, COL_3) VALUES('111', 'AAAABBBB', '222') ;
9
- INSERT INTO TBL(STRING) VALUES('111,CCCC,222') ;
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.STRING
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.STRING) = 16 THEN
36
+ IF LENGTH(REC_T.COL_2) = 8 THEN -- COL_2が8バイトなら2行で出力
33
- DBMS_OUTPUT.PUT_LINE(SUBSTR(REC_T.STRING, 1, 8) || SUBSTR(REC_T.STRING, 13, 4));
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.STRING, 1, 4) || SUBSTR(REC_T.STRING, 9, 8));
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.STRING) ;
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 ;