Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 釜つる
- pyenv
- 뮌헨
- 미츠이 스미토모
- 방콕
- typescript
- vba
- terraform
- 프라하
- node.js
- 태국
- PostgreSQL
- 三井住友カード
- javascript
- 메르페이
- CSV
- JenkinsFile
- 아타미
- documentdb
- Python
- react.js
- duckdb
- 카마츠루
- local
- 체코
- codebuild
- PayPay
- Selenium
- 페이페이
- 熱海
Archives
- Today
- Total
도쿄사는 외노자
How to parse comma delimited string in PL/SQL 본문
이를 VARCHAR2 Parameter로 Oracle Stored Procedure로 전송하였다.
이제는 이를 Procedure내에서 파싱할 차례.
i_cdDataList라는 이름으로 해당 String을 받아왔다.
이를 커서에 넣어서 LOOP로 돌리기로 하였고,
결론적으론 CD_DATA라는 이름으로 데이터를 뽑아낼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | -- データリスト CURSOR CUR_CD_DATA_LIST IS SELECT CD_DATA -- データ FROM ( SELECT TRIM (REGEXP_SUBSTR (CD_DATA_LIST, '[^,]+', 1, LEVEL)) AS CD_DATA FROM ( SELECT i_cdDataList AS CD_DATA_LIST -- データリスト FROM DUAL ) CONNECT BY LEVEL <= regexp_count (CD_DATA_LIST, ',', 1) + 1 ) WHERE CD_DATA IS NOT NULL ; REC_CD_DATA_LIST CUR_CD_DATA_LIST%ROWTYPE; | cs |
당장 프로시저를 돌려서 확인할 수는 없는 노릇이라
일단 SELECT문만 떼서 돌려 보았다.
테스트 데이터는
'aaaaaaaaa,bbbbbbbbbbbbbbb,cccccccccc,ddddddddddddd,eeeeeeeee'
이다.
실제 커서를 돌릴 때의 코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | PROCEDURE CHK_CD_DATA_LIST IS BEGIN -- 対象外フラグの初期化 g_fgNoData := 0; -- CURSOR CUR_CD_DATA_LISTをOPENする OPEN CUR_CD_DATA_LIST; -- LOOPを回し、データを分別する LOOP FETCH CUR_DATA_LIST INTO REC_DATA_LIST ; -- 繰り返し終了 EXIT WHEN CUR_CD_DATA_LIST%NOTFOUND; /* パラメータ設定 */ g_cdData := REC_CD_DATA_LIST.CD_DATA; -- データが一致するか確認 IF g_cdData <> g_ifData THEN -- 入ってなかったら対象外フラグを"1"にする g_fgNoData := 1; END IF; -- LOOP終わり END LOOP; -- カーソルクローズ CLOSE CUR_CD_DATA_LIST; END CHK_CD_DATA_LIST; | cs |
간단히 내용을 설명하자면,
커서를 돌리기 전, 프로시저의 다른 부분에서 SELECT문을 돌려 g_ifData에 값을 받아온다.
g_ifData와, 커서를 돌려 나온 g_cdData를 비교하여,
일치하지 않을 경우 대상외플래그(g_fgNoData)를 세운다.
String으로 보내는게 맘에 들지 않을 경우, 이런 방법도 있다.
'Tech > DB・SQL' 카테고리의 다른 글
테이블 복사 쿼리 (0) | 2016.06.28 |
---|---|
OUTPUT Clause (SQL Server) (0) | 2016.03.29 |
A5M2를 이용한 데이터 입력 (0) | 2016.01.07 |
MSSQL에서의 CONVERT Function 사용 (0) | 2016.01.06 |
Oracle Database Link (0) | 2015.12.02 |