2016-03-25 46 views
1

Oracle SQL Developerでは、式を使用して複数の列名をSELECT文の一部として別名で指定できますか(各列のエイリアスを手動で指定するのではなく)Oracle SQL Developerの式を使用した複数列のエイリアシング

具体的には、大きなデータテーブルのタスク関連サブセットのセットを格納するマッピングテーブルがあります。マッピングテーブルの各エントリは、データテーブルのカラム名を人間が判読可能な記述に結び付けます。私は、マッピングテーブルにリストされているデータテーブルの列を選択し、マッピングテーブルの説明を列ヘッダーとして表示したいが、手動で列名と人間が読める別名を1つずつ入力する必要はありません。これは可能ですか?

私は答えをオンラインに見つけた最も近いが、私がやりたいことができないであることを示唆している。このSO質問です:Oracle rename columns from select automatically?

しかし、その質問は、2010年から、私は状況が変化している願っていますされます。ご協力ありがとうございました。

答えて

0

これはまだ100%ネイティブSQLでは実行できません。これらの過度に動的な状況は、通常回避するのが最善です。複雑なコードの を追加するよりも少し余分なタイピングが一般的に優れています。

本当に例外的なケースがあり、そこに価格を支払うつもりなら、です。 100%天然SQLは使用しませんが、Oracle Data Cartridgeフレームワークを使用してデータベースを拡張するため、「純粋な」SQLと見なすことができます。

私のオープンソースプロジェクトMethod4を使用して、SQLで動的SQLを実行できます。 Githubの手順に従って、オブジェクトをダウンロードしてインストールします。コードは辛いほど複雑ですが、運良くあなたはそのほとんどを理解する必要はありません。列名のカスタマイズを開始するには、以下の簡単な変更だけが必要です。

法4変更

新しい列名を保持する変数を作成します。それをファイルMETHOD4_OT.TPBの12行目の関数ODCITableDescribeの宣言セクションに追加します。

v_new_column_name varchar2(32); 

古い列を新しい列にマップするSQL文を作成します。これを行31に追加します。行31では、列ごとに実行されます。新しい変数名を参照するために

 --Get mapped column name if it exists. If none, use the existing name. 
    select nvl(max(target_column_name), r_sql.description(i).col_name) 
    into v_new_column_name 
    from column_names 
    where source_column_name = r_sql.description(i).col_name; 

変更行42:今

     substr(v_new_column_name, 1, 30), 

マッピング表

drop table column_names; 
create table column_names 
(
    source_column_name varchar2(30), 
    target_column_name varchar2(30), 
    constraint column_names_pk primary key(source_column_name) 
); 
insert into column_names values('A1234', 'BETTER_COLUMN_NAME'); 
insert into column_names values('B4321', 'Case sensitive column name.'); 

クエリ例

いずれかからの列名キューあなたが望むどんな値にでも魔法のように変更することができます。これは単純にテキスト置換を使用するのではありません。 *の列も変更されます。

SQL> select * from table(method4.query('select 1 a1234, 2 b4321, 3 c from dual')); 

BETTER_COLUMN_NAME Case sensitive column name.   C 
------------------ --------------------------- ---------- 
       1       2   3 

警告が

OracleのSQLは、恐ろしく複雑で、それは多くの潜在的な問題を抱えている場合は上の層を構築する試みです。たとえば、パフォーマンスは確かに遅くなります。私は多くの単体テストを作成しましたが、正しく動作しない奇妙なデータ型があると確信しています。 (しかし、見つけたら、Githubの問題を作成して修正してください。)

私の経験上、人々はこのタイプの動的な行動を求めるときには、通常はその価値がありません。時には少し余分なタイピングが最善の解決策です。

+0

ありがとうJon!私はあなたの返信に時間をかけていただきありがとうございます&このショットを与えるでしょう。私が動的な解決策を探している理由は、このクエリを実行する必要があるたびに(それはしばしばですが)、新しい列名を持つ新しい表に対してです。 –

関連する問題