についてお読みくださいDynamic SQL
。
基本的に、それは次のようなものになります
l_query := 'select * from '
|| case l_param
when 1 then 'table1'
when 2 then 'table2'
end;
次に、この文字列を使用してカーソルを開きます。クエリの実際の動作に応じて、これを行うためのいくつかのオプションがあります。
あなたの質問を注意深く読んでいませんでした。純粋な sqlソリューションが必要な場合は、おそらく何もありません。おそらくunion all
、異なるテーブルからの結果セットを連結するためにのみ使用し (構造が似ていると仮定)、パラメーター値でフィルター処理するだけです。
update : 別のオプションは次のようなものです-XMLを生成してクエリしますが、それが良い習慣であるかどうかは完全にはわかりません:)
10:54:40 SYSTEM@dwh-prod> l
1 select *
2 from xmltable(
3 '/ROWSET/*'
4 passing xmltype(
5 dbms_xmlgen.getxml(
6 'select * from '
7 || case :param
8 when 1 then 'all_objects'
9 when 2 then 'user_objects'
10 else 'dba_objects'
11 end
12 ||' where rownum < 10'
13 )
14 )
15 columns
16 object_name varchar2(100) path '//ROW/OBJECT_NAME',
17 object_type varchar2(100) path '//ROW/OBJECT_TYPE',
18 status varchar2(100) path '//ROW/STATUS'
19* )
10:54:40 SYSTEM@dwh-prod> exec :param := 1;
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
10:55:00 SYSTEM@dwh-prod> /
OBJECT_NAME OBJECT_TYPE STATUS
-------------------- -------------------- --------------------
CON$ TABLE VALID
I_COL2 INDEX VALID
I_USER# INDEX VALID
C_TS# CLUSTER VALID
I_OBJ# INDEX VALID
I_CON2 INDEX VALID
I_OBJ5 INDEX VALID
IND$ TABLE VALID
BOOTSTRAP$ TABLE VALID
9 rows selected.
Elapsed: 00:00:00.04
10:55:01 SYSTEM@dwh-prod> exec :param := 2;
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
10:55:06 SYSTEM@dwh-prod> /
OBJECT_NAME OBJECT_TYPE STATUS
-------------------- -------------------- --------------------
AQ$DEF$_AQCALL VIEW VALID
AQ$DEF$_AQERROR VIEW VALID
AQ$_DEF$_AQCALL_E QUEUE VALID
AQ$_DEF$_AQCALL_F VIEW VALID
AQ$_DEF$_AQERROR_E QUEUE VALID
AQ$_DEF$_AQERROR_F VIEW VALID
AQ$_INTERNET_AGENTS TABLE VALID
AQ$_INTERNET_AGENT_P TABLE VALID
AQ$_QUEUES TABLE VALID
9 rows selected.
Elapsed: 00:00:00.04