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と運があるかもしれません。クエリでエイリアス化されている列名ではなく、基になる列名が必要なのはなぜですか?クエリがより複雑であるかどうかを確認したいとします。 'select c.col1、c.col2の行に沿ってサブクエリを持つ(a.col1 = b.col3上のtable1からa.col1、b.col2を選択し、a.col3 = b.col3の内部結合テーブル2b)c'? – Boneist
おそらく、あなたはこの目的のために独自のパーサーを書く必要があります。しかし、私は好奇心が強いです - 何のためにそれが必要ですか? –
これは可能だとは思わない。 SELECT a.col1 ||のようなクエリがあるとします。 a.col2 AS ... 'または' SELECT CASE col1 col2 then col3 else col4 end AS ... 'となります。どの列名を期待しますか? –