2016-09-15 3 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 IMMEDIATELY, и он не жаловался на несуществующий столбец. Этот подход в порядке? – 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');" будет составлен. Отдых будет отброшен.

 Смежные вопросы

  • Нет связанных вопросов^_^