がダイナミックを使用できるOracle SQLクエリですOracle Data CartridgeとANY *タイプを使用して、表名を作成します。しかし、これらの高度な機能を使用する前に、一歩踏み込んで、これが本当に必要かどうかを尋ねてください。
本当にというSQLのステートメントがその動的である必要がありますか?通常、これは、異なるタイプの照会を提出できるアプリケーションによって処理される方が適しています。予期しないタイプを処理できる多くのアプリケーションプログラミング言語とツールキットがあります。これがデータベース専用操作の場合は、通常は結果がどこかに格納されます。この場合、PL/SQLと動的SQLははるかに簡単です。
完全に動的なSQL文が必要なまれなケースがあると確信できるなら、私のオープンソースプロジェクトMethod4のようなものが必要になります。ダウンロードしてインストールし、以下のコードを試してください。
スキーマのセットアップ
create table tab1(a number);
create table tab2(b number);
create table tab3(c number);
insert into tab1 values(10);
insert into tab2 values(20);
insert into tab3 values(30);
create table col_tab(table_name varchar2(30), id number);
insert into col_tab values('TAB1', 1);
insert into col_tab values('TAB1', 2);
insert into col_tab values('TAB1', 3);
commit;
クエリ
select * from table(method4.dynamic_query(
q'[
select 'select * from '||table_name sql
from col_tab
where id = 1
]'));
結果:
A
--
10
あなたは、クエリ内のクエリは非常に困難であることをすぐに発見するでしょう。これを実行する方がずっと簡単ですが、設計変更が必要な場合があります。
SQLブロックを試すことができます。 –
手続きでは簡単にこれを行うことができます。手順なしでこれを行う方法はありますか? – Pirate
いいえ、ありません。 SQLでは、文が実際に実行される前にすべての表(および列)が認識されている必要があります(実際には悪い設計のような音が必要なデータベース・モデル)。 –