database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40201 게시물 읽기
No. 40201
프로시져 루핑관련 질문입니다.
작성자
량디(fidele)
작성일
2013-07-19 14:02
조회수
7,065

안녕하세요... 프로시져 개발중인데 잘 안되는 부분이 있어서 질문 드립니다.

파라미터 숫자형 자릿수는 10자리이며 앞에 8자리는 날짜,  뒤 2자리는 차수입니다.

그래서 파라미터로   '2013010101|2013010102|2013010103|2013010202' 이런 데이타를 넘겨 프로시져를

호출하면 프로시져 안에서 '|' 구분자로 잘라서  나온 숫자형 10자리로 루핑을 돌면서 테이블에 INSERT를 하려 합니다.

테이블 구조  

작업일자 (VARCHAR2 8 BYTE)

차수         (NUMBER  2)

 

회원님들 방법좀 알려주시면 감사하겠습니다.

 

이 글에 대한 댓글이 총 8건 있습니다.
루핑 돌 필요은 없을것 같네요.
 
아래 sql 로 테이블에 바로 insert  하시면 될 것 같네요.

WITH t(in_val) AS(
SELECT '2013010101|2013010102|2013010103|2013010202' FROM dual
)
SELECT SUBSTR(val, 1, 8) 작업일자
     , SUBSTR(val, 9, 2) 차수 
  FROM (SELECT REGEXP_SUBSTR(in_val, '[^|]+', 1, lv) val
          FROM t
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 100)
         WHERE lv <= REGEXP_COUNT(t.in_val, '[|]') + 1
        ) 
아린(arin76)님이 2013-07-19 14:12에 작성한 댓글입니다.

아... 아린님 감사합니다..

근데 실행해보니 지원되지 않는 열 별칭지정 이라고 나오는데. 이건 어찌 해야 하는지요...

 

량디(fidele)님이 2013-07-19 14:20에 작성한 댓글입니다.

 버전이 어떻게 되나요?

아린(arin76)님이 2013-07-19 14:22에 작성한 댓글입니다.

10g 버전입니다.

량디(fidele)님이 2013-07-19 14:27에 작성한 댓글입니다.
:in_val 변수에 값을 입력하시면 됩니다.
in_val := '2013010101|2013010102|2013010103|2013010202'

SELECT SUBSTR(val, 1, 8) 작업일자
     , SUBSTR(val, 9, 2) 차수
  FROM (SELECT REGEXP_SUBSTR(:in_val, '[^|]+', 1, LEVEL) val
          FROM dual
         CONNECT BY LEVEL <= REGEXP_COUNT(:in_val, '[|]') + 1
        )
 
 
아린(arin76)님이 2013-07-19 14:30에 작성한 댓글입니다.
이 댓글은 2013-07-19 14:36에 마지막으로 수정되었습니다.

10g 버전에서는 regexp_count가 안먹나봐요 ㅠㅠ

Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

량디(fidele)님이 2013-07-19 14:36에 작성한 댓글입니다.
아래꺼로 해보세요. 
REGEXP_COUNT 는 11g 부터 되는가 보네요.

SELECT SUBSTR(val, 1, 8) 작업일자
     , SUBSTR(val, 9, 2) 차수
  FROM (SELECT REGEXP_SUBSTR(:in_val, '[^|]+', 1, LEVEL) val
          FROM dual
         CONNECT BY LEVEL <= LENGTH(:in_val)
                           - LENGTH(REPLACE(:in_val, '|', ''))+1
        )  
        
아린(arin76)님이 2013-07-19 14:39에 작성한 댓글입니다.
이 댓글은 2013-07-19 14:41에 마지막으로 수정되었습니다.

아리님 ~ 잘 되네요 ...감사합니다~

량디(fidele)님이 2013-07-19 15:39에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
402041시간 반 전을 어떻게 표현해야 하나요? [2]
화악산
2013-07-23
6212
40203문자열 자르기 [4]
초보
2013-07-22
7981
40202제약조건 관련되 문의드립니다. [1]
새하정
2013-07-19
6066
40201프로시져 루핑관련 질문입니다. [8]
량디
2013-07-19
7065
40200orage for oracle 5.0 시리얼 번호 알수 없나요? [1]
김가영
2013-07-19
8782
40199DB에서 결과가 되돌아 오지 않는 경우는? [1]
줄리아
2013-07-18
6074
40198full scan 이유를 알고 싶습니다.(between) [2]
초보디비
2013-07-17
7998
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다