세로를 가로로 출력해야하는 문제입니다. 0 4 2,234

by 구루비 [Oracle 기초] [2014.07.18 11:48:42]


안녕하세요.

제가 질문 드리고 싶은 것은 세로로 된 데이터를 가로로 출력하고자 하는 것입니다.

순번 이름
1 홍길동
2 이순신
3 강감찬
4 김유신

현재 제가 한 부분은 실제적으로 가로로 출력을 완성한 상태 이구요.

작성한 SQL 은 

SELECT 

       MIN(DECODE(순번, 1, 이름)) AS A_1

       , MIN(DECODE(순번, 2, 이름)) AS A_2

       , MIN(DECODE(순번, 3, 이름)) AS A_3

       , MIN(DECODE(순번, 4, 이름)) AS A_4

FROM

       DUAL;

이런식으로 해서 

A_1 A_2 A_3 A_4
홍길동 이순신 강감찬 김유신

결과가 나오게 되었습니다.

문제는...

저렇게 생성해야 하는 컬럼의 갯수가 너무 많아서요.

일일히 전부 저 방식으로 해주어야만 하는지..

혹시 가변적으로 SQL 로 처리할 수 있는 방법이 있는지 궁금해서 이렇게 글을 남기게 되었습니다.

부족한 답변 읽어주셔서 감사합니다.

by 마농 [2014.07.18 12:43:42]

가변적으로 열을 늘리는 방법은 정적SQL 에서는 없습니다.

동적SQL(프로그램에서 SQL 구문을 텍스트 변수로 만들어 내는 일) 을 사용하셔야 합니다.


by 우리집아찌 [2014.07.18 13:19:20]

컬럼 갯수값이 한정적이면 만들어 놓고 쓰는것도 방법입니다.

늘어나는 컬럼이 무한이면 안되지만요..


by 아발란체 [2014.07.18 14:26:45]
--응용 샘플
1.
CREATE OR REPLACE PROCEDURE PROC_TEST (
    p_resultset OUT SYS_REFCURSOR
) IS
    v_query VARCHAR(1000);
BEGIN 
    v_query := 'SELECT 1, 2 FROM DUAL';
    OPEN p_resultset FOR v_query;
END;

2.
SQLPLUS 로그인

3.
SQL> VAR resultSet REFCURSOR;
SQL> CALL PROC_TEST(:resultSet);
SQL> PRINT resultSet;


4. PL/SQL 블럭 이용 확인

DECLARE 
O_TotalRecords NUMBER; 
BEGIN 
test(1, O_TotalRecords); 
DBMS_OUTPUT.PUT_LINE(O_TotalRecords); 
END;

 


by 아발란체 [2014.07.18 14:28:17]

동적 SQL 바인딩 처리 세미나 자료 : http://www.gurubee.net/article/62865

38페이지

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