Oracle Database 11g에서 Pl/SQL을 사용하고 있습니다.Oracle의 쿼리 문자열로 열과 별칭 목록 가져 오기
별칭이있는 열의 목록을 쿼리 문자열로 가져 오려고합니다. dbms_sql.describe_columns2
을 사용하여 쿼리의 모든 열 이름을 가져 오는 방법이 있지만 별칭 만 가져옵니다. 예를 들어
:
DECLARE
l_cursor NUMBER := dbms_sql.open_cursor;
l_ignore NUMBER;
l_desc dbms_sql.desc_tab2;
l_cnt NUMBER;
BEGIN
dbms_sql.parse(l_cursor, 'select a.col1 column1, a.col2 column2 from table_test a', dbms_sql.native);
dbms_sql.describe_columns2(l_cursor, l_cnt, l_desc);
FOR i IN 1 .. l_cnt LOOP
dbms_output.put_line(l_desc(i).col_name);
END LOOP;
dbms_sql.close_cursor(l_cursor);
END;
/
결과 :
column1
column2
값 쿼리의 별칭 a.col1
, 또는 a.col2
를 얻을 수있는 방법이 있나요?
dbms_sql과 함께 사용하지 마십시오. 그러나 regexp_substr에 약간의 행운이있을 수 있습니다. 쿼리에서 앨리어스 된대로 열 이름 대신 기본 열 이름이 필요한 이유는 무엇입니까? 검색어가 더 복잡한 지 보려면 무엇을보고 싶습니까? '선택 c.col1, c.col2의 라인을 따라 서브 쿼리를 사용하여 (a.col1에서 b.col2를 선택하고 a.col3 = b.col3에서 내부 조인 table2 b) c'? – Boneist
아마도이 목적을 위해 자체 파서를 작성해야 할 것입니다. 그러나 나는 호기심이 있습니다 - 당신은 그것을 위해 무엇을 필요로합니까? –
나는 이것이 가능하다고 생각하지 않는다. 상상해보십시오. SELECT a.col1 || a.col2 AS ...'또는'CASE 2 col3 then col3 else as col4 end AS ...'를 선택하십시오. 어떤 컬럼 이름을 기대합니까? –