2016-09-15 16 views
0

製品のリリース・バージョンに基づいてPL/SQLコードを実行する必要がある場合は、if/else条件付きロジックを追加するか、例外的な処理によって処理する方が良いでしょうか?if/else条件付きロジック対例外処理

IF release_version > 5 THEN 
    execute some SQL query only for release > 5 because a certain column was only introduced in ver 6; 
ELSE 
    execute another SQL query; 
END IF; 
+4

存在しない列を参照する静的SQL文を使用する場合は、問題が発生します。列が存在しない場合は、ブロック全体がコンパイルされないため、ELSEは実行できません。 IF/ELSEまたは例外ブロックがある場合は問題ありません。ブロック全体がコンパイルに失敗します。これが実際の状況であれば、(Oracleのバージョンに応じて)条件付きコンパイルを検討する可能性がありますが、それはプロセスにさらに複雑さを加える可能性があります。 –

+0

私はEXECUTEを即座に使用していますが、存在しない列については不平を言っていません。そのアプローチは大丈夫ですか? – Pha3drus

+2

PL/SQLコードベースをテーブル構造と同期させることができないのはなぜですか?リリース5と6で表が異なる場合は、PL/SQLコードを使用できないのはなぜですか? – user272735

答えて

1

ベストプラクティスは、ご使用のバージョンのために必要な方法のみコードがコンパイルされていることを「条件付きコンパイルで」

Conditional Compilation in Oracle

を使用することです。

この例では
create or replace package product as 
    version number := 5; 
end; 
/

create or replace procedure compiletime as 
begin 
    $if product.version=5 $then 
     dbms_output.put_line ('I am version 5'); 
    $elsif product.version=6 then 
     dbms_output.put_line('I am version 6'); 
    $else 
     dbms_output.put_line('Some other version'); 
    $end 
end compiletime; 

のみ "DBMS_OUTPUT.PUT_LINE( '私はバージョン5午前');は" コンパイルされるだろう。残りは捨てられるでしょう。

関連する問題