ORACLE SQL - 변수에 select 문 결과값 저장후 해당 변수 사용 방법 0 9 2,398

by Num [SQL Developer] PL/SQL 변수 [2023.05.03 16:05:35]


테이블을 조회할때 헤더에 오는 값을 코멘트값으로 만들고 싶습니다.

생각해본 방법으로는 

DBA_COL_COMMENTS 테이블에서 코멘트값을 가지고 LISTAGG 하여 한줄로 나열한 것을 변수에 저장한 뒤

해당 변수를 가지고 피봇테이블을 구성할 생각입니다.

문제는

변수에 SELECT 문의 결과값을 넣으려면 DECLARE 를 써야하는데 DECLARE에서는 조회문의 결과를 보여줄 수 없습니다.

 하여 함수나 프로시저로 만들거나 해서 결과값을 가지고 나온뒤 DEFINE 해서 써야할 것 같은데...

 함수나 프로시저로 만들지 않고 구성하려면 방법이 없을까요?

 

by ㅇㅇ준 [2023.05.03 16:11:19]

음..이런기능을 어플리케이션에서 하시는 게 어떨까요?


by Num [2023.05.03 16:34:46]

디벨로퍼에서 볼때 조금 더 편하게 보고싶어서 ㅎㅎ;


by 우리집아찌 [2023.05.03 16:37:00]

DBA_COL_COMMENTS 의 어느컬럼을를 어떻게 표현하고 싶은지

원하는 결과를 보여주세요.


by Num [2023.05.03 16:52:03]

SELECT *

FROM (

SELECT COLUMN_NAME, COMMENTS

FROM DBA_COL_COMMENTS

WHERE 1=1

AND OWNER = 오너명

AND TABLE_NAME = 테이블명

)

PIVOT (MAX (COMMENTS) FOR COLUMN_NAME IN ( 테이블 컬럼들) );

일단이렇게 만들어서 

-------

헤더 컬럼명

데이터 코멘트

-------------

한줄짜리 조회문으로 헤더명으로 쓰거나 UNION ALL로 최상단에 붙이거나 할 생각이 있습니다.


by 우리집아찌 [2023.05.03 17:25:55]

http://www.gurubee.net/article/85038

PIVOT XML 이용하시면 될것같네요.


by Num [2023.05.08 16:28:37]

XML 양식으로 결과가 출력된다해서 다른방법도 찾아보고있습니다


by 마농 [2023.05.03 22:55:49]
SELECT *
  FROM (SELECT a.owner
             , a.table_name
             , a.column_id
             , a.column_name col_name
             , b.comments    col_cmnt
          FROM dba_tab_columns  a
             , dba_col_comments b
         WHERE a.owner       = b.owner
           AND a.table_name  = b.table_name
           AND a.column_name = b.column_name
           AND a.owner      = 'SCOTT'
           AND a.table_name = 'EMP'
        )
 UNPIVOT INCLUDE NULLS (v FOR gb IN (col_name, col_cmnt))
 PIVOT (MIN(v) FOR column_id IN ( 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, 40
--                               41, 42, 43, 44, 45, 46, 47, 48, 49, 50
                                 ))
 ORDER BY owner, table_name, gb DESC
;

 


by Num [2023.05.08 16:26:56]

좋은쿼리 감사합니다. 혹시 컬럼 길이를 동적으로 늘리는 방법이 있을까요?

 


by 마농 [2023.05.08 18:17:20]

동적으로 하려면 질문에서 언급하신 것처럼 PL/SQL 사용해야죠.
간단하게 SQL 로 결과만 확인할 용도라면? 굳이 동적으로 할 필요 있나요?
그냥 컬럼개수 넉넉하게 잡아 놓고 사용하시면 될텐데요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입