안녕하세요 오라클 쿼리를 짜다가 문제에 봉착하여 질문 드립니다. 아래와 같은 테이블구조에서 데이터를 SELECT 해 와야 합니다. SELECT 할 때 조건이 있는데 앞의 두개 컬럼은 ACCT_PRD , GUBUN_CODE / 마지막 컬럼은 INSERT_ID, INSERT_DATE 순서가 되어야만합니다. 그리고 가운데에는 COL_ 접두어가 붙은 컬럼이 숫자순서대로 와야 하구요. EX) ACCT_PRD, GUBUN_CODE, COL_1, COL_2, .... COL_11, INSERT_ID, INSERT_DATE 그런데 중요한 건 COL_ 로 시작하는 컬럼이 몇개가 있을 지 모릅니다. 유사한 테이블이 100개가 넘는 상황(COL_ 컬럼 개수만 다릅니다) 에서, 위 순서대로 컬럼을 가져와야 하는데 방법이 있을까요? 오라클에서는 컬럼 순서를 지정해서 추가하지 못해(가장 뒤로감) 생기는 문젠데요. 혹시 방법을 아시는 분은 조언 부탁드리겠습니다ㅠ WITH T1 AS (SELECT '201612' ACCT_PRD , 'A100' GUBUN_CODE ,'1' COL_1 ,'2' COL_2 ,'3' COL_3 ,'4' COL_4 ,'5' COL_5 ,'6' COL_6 ,'7' COL_7 ,'8' COL_8 ,'9' COL_9 ,'aaa' insert_id ,'2016-01-04' insert_date ,'10' COL_10 ,'11' COL_11 FROM DUAL) SELECT * FROM T1
다이나믹 쿼리 만드신다면 SELECT절 컬럼을 가지고 와서 붙여넣으세요.
SELECT LISTAGG(COLUMN_NAME,',') WITHIN GROUP(ORDER BY DECODE(COLUMN_NAME,'ACCT_PRD',-2,'GUBUN_CODE',-1,'INSERT_ID',1,'INSERT_DATE',2,0),COLUMN_ID) "COLUMNS" FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명' AND (COLUMN_NAME LIKE 'COL%' OR COLUMN_NAME IN ('ACCT_PRD','GUBUN_CODE','INSERT_ID','INSERT_DATE'))
다시 생각해보니 이건 좀 아닌듯..; 사용할 때마다 call이 발생해서 좋지 않겠네요. 해당 뷰 자체도
가벼운 편도 아니구요. 정확히 어떤 걸 원하시는지부터 명확히 알아야 할 것 같네요.