Oracle에서 쿼리가 반환하는 모든 열을 추출 할 수있는 SQL stmt가 있습니까?쿼리의 모든 열 나열 (Oracle)
자바와 함께 쿼리를 실행하고 메타 데이터를 처리 할 수 있지만 편리한 방법을 찾았습니다.
Oracle에서 쿼리가 반환하는 모든 열을 추출 할 수있는 SQL stmt가 있습니까?쿼리의 모든 열 나열 (Oracle)
자바와 함께 쿼리를 실행하고 메타 데이터를 처리 할 수 있지만 편리한 방법을 찾았습니다.
이 하나를 시도
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'));
당신이 그들을 알아야을, 쿼리를 지정하기 때문이다. '*'는 사용하지 마십시오. 노골적으로 말하십시오. – ceving
필요하지 않음 : 다음 쿼리를 사용하면 어떻게됩니까? 'SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID' – Markus
여기 테이블의 열을 나열하는 방법을 참조하십시오 : http://stackoverflow.com/a/26977159/402322 – ceving