top of page

가로세로 SQL 결과값 전화 row ->column

가로세로 SQL 결과값 전화 row ->column

No. 10955

ROW의 DISPLAY방향을 ACROSS-DOWN에서 DOWN-ACROSS로 ================================================

PURPOSE ———

Sql*Plus에서 Select statement를 수행하면 row의 출력이 ‘across-down’형태로 나타난다.

SQL> SELECT deptno, dname FROM dept;

DEPTNO DNAME ——— ————– 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS

그렇지만, 경우에 따라 아래와 같이 ‘down-across’의 출력을 필요로 할 경우도 있다.

10 20 30 40 ACCOUNTING SALES RESEARCH OPERATIONS

Example ——–

/* * SQL*Plus set commands */ SET HEADING OFF SET VERIFY OFF SET FEEDBACK OFF

/* display되는 column의 갯수만큼 column을 선언하고 길이는 아래 예제의 wid * 변수의 길이만큼 선언한다. */ CREATE TABLE trans ( C1 VARCHAR2(15), C2 VARCHAR2(15), C3 VARCHAR2(15), C4 VARCHAR2(15));

/* * PL/SQL 예제 */ DECLARE

CURSOR mycursor IS SELECT deptno, dname FROM dept ORDER BY deptno; mycurrec mycursor%ROWTYPE; numcols NUMBER := 4; /* 한 line에 display될 column 수 */ wid NUMBER := 15; /* display될 column의 길이 */ deptnostr VARCHAR2(60); /* source table의 첫번째 column */ dnamestr VARCHAR2(60); /* source table의 두번째 column */

BEGIN

OPEN mycursor;

LOOP EXIT WHEN mycursor%NOTFOUND; deptnostr := ”; dnamestr := ”;

FOR i IN 1..numcols LOOP FETCH mycursor INTO mycurrec; EXIT WHEN mycursor%NOTFOUND;

deptnostr := deptnostr || RPAD(TO_CHAR(mycurrec.deptno), wid); dnamestr := dnamestr || RPAD(mycurrec.dname, wid);

END LOOP;

/* * 아래의 insert문에 fail이 나지 않게끔 column길이의 마지막에 * space를 padding한다. */ deptnostr := RPAD(deptnostr, numcols*wid); dnamestr := RPAD(dnamestr,numcols*wid);

/* * result table에 string을 insert한다. */ INSERT INTO trans VALUES( SUBSTR(deptnostr, 1, wid), SUBSTR(deptnostr, wid+1, wid), SUBSTR(deptnostr, 2*wid+1, wid), SUBSTR(deptnostr, 3*wid+1, wid));

INSERT INTO trans VALUES( SUBSTR(dnamestr, 1, wid), SUBSTR(dnamestr, wid+1, wid), SUBSTR(dnamestr, 2*wid+1, wid), SUBSTR(dnamestr, 3*wid+1, wid));

/* * 각 set간에 빈 line을 삽입한다. */ INSERT INTO trans VALUES(NULL, NULL, NULL, NULL);

END LOOP; CLOSE mycursor;

END; /

COMMIT;

SELECT * FROM trans; DROP TABLE trans;

/* * SQL*Plus set commands를 원래 상태로. */ SET HEADING ON SET VERIFY ON SET FEEDBACK ON

조회수 1회댓글 0개

תגובות


bottom of page