あなたはデザインが悪いです。
私はテーブルbd.images_yyyy
について話します。 1年間にがパーティション化されたの列の年を持つ単一の表bd_imagesにそれらを配置することが最善です。
あなたのクエリはなる:
SELECT
x.name, x.year, w.imgblob
FROM
bd.img_idx x
JOIN bd.images w on (x.year = w.year and w.name = x.name)
WHERE
x.name = 'nanananana'
しかし、あなたはあなたのデータベースを変更することはできませんか、あなたはエンタープライズライセンスを持っていない場合には、いくつかのダイナミックDDLを行うことができます。
名前、年、imgblob(tmptable)で誘惑を作成します。
はを移入:
Procedure populate_tmp (text varchar2)
begin
for r in (select x.name, x.year from bd.img_idx x where x.name= text)
loop
execute immediate 'insert into tmptable values ('||r.name||','||r.year||',' (select w.imgblob from bd.images'||r.year||' w where w.year = '||r.year||' and w.name= '||r.name||'))';
end loop;
end;
と移入( 'nananannaa')の後に、あなたはtmptableから選択することができます。
注意::tmptableの古いデータを処理しないため、global temporary table on commit delete
として作成できます。コミットすると、データは表から消滅します。
データベースを変更できません。また、ストアドプロシージャを使用することを避けたいのは、プロシージャを変更するたびにデータベース管理者に許可を求める必要があるからです。 –
dbaと通信して、ビジネスの必要性を説明する代わりに、トリックを使用する方が賢明でしょうか?パーティションを使用するのがずっと簡単かもしれませんし、おそらく古い古いパーティションビューを使用することもできます。動的SQLを使用する場合も、バインド変数を必ず使用してください。 –
確かに、ik_selfは正しいです。あなたとあなたのDBAは技術的な上司を持っており、何が良いのかを理解する必要があります。何もしないで、DBAは4か月間働くか、DBAは1日と3日間働きます。それはあなたの選択肢ではなく、彼の選択肢(テクニカルリーダー) –