2016-08-17 2 views
1

Oracle에서 쿼리가 반환하는 모든 열을 추출 할 수있는 SQL stmt가 있습니까?쿼리의 모든 열 나열 (Oracle)

자바와 함께 쿼리를 실행하고 메타 데이터를 처리 할 수 ​​있지만 편리한 방법을 찾았습니다.

+0

당신이 그들을 알아야을, 쿼리를 지정하기 때문이다. '*'는 사용하지 마십시오. 노골적으로 말하십시오. – ceving

+0

필요하지 않음 : 다음 쿼리를 사용하면 어떻게됩니까? 'SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID' – Markus

+0

여기 테이블의 열을 나열하는 방법을 참조하십시오 : http://stackoverflow.com/a/26977159/402322 – ceving

답변

3

이 하나를 시도

DECLARE 

    sqlstr VARCHAR2(1000); 
    cur INTEGER; 
    columnCount INTEGER; 
    describeColumns DBMS_SQL.DESC_TAB; 

BEGIN 

    cur := DBMS_SQL.OPEN_CURSOR; 
    sqlstr := 'SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID'; 
    DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE); 
    DBMS_SQL.DESCRIBE_COLUMNS(cur, columnCount, describeColumns); 
    FOR i IN 1..columnCount LOOP 
     DBMS_OUTPUT.PUT_LINE (describeColumns(i).col_name); 
    END LOOP; 
    DBMS_SQL.CLOSE_CURSOR(cur); 

END; 

업데이트 :을 당신이 할 수있는 결과 세트를 얻기 위해 :

CREATE OR REPLACE TYPE VARCHAR_TABLE_TYPE AS TABLE OF VARCHAR2(30); 

CREATE OR REPLACE FUNCTION GetColumns(sqlstr IN VARCHAR2) 
    RETURN VARCHAR_TABLE_TYPE PIPELINED AS 

    cur INTEGER; 
    columnCount INTEGER; 
    describeColumns DBMS_SQL.DESC_TAB; 

BEGIN 

    cur := DBMS_SQL.OPEN_CURSOR; 
    DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE); 
    DBMS_SQL.DESCRIBE_COLUMNS(cur, columnCount, describeColumns); 
    FOR i IN 1..columnCount LOOP 
     PIPE ROW(describeColumns(i).col_name); 
    END LOOP; 
    DBMS_SQL.CLOSE_CURSOR(cur); 
    RETURN; 
END; 


SELECT * FROM TABLE(GetColumns('SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID')); 
+0

SQL dev – Markus

+0

에서'set serveroutput on'을 실행하는 것을 잊지 마십시오'describeColumns'의 값을 결과 집합으로 반환하는 방법이 있습니까? – Markus