--Включаем трассировку
define is_client_trace="--"
begin
&is_client_trace
dbms_output.put_line('Код включаемый для трассировки');
--*/
dbms_output.put_line('Оcновная логика ...');
end;
В чем разница по сравнению с PL/SQL Conditional Compilation ?
В данном случае код просто будет в виде комментария.
--Выключаем трассировку
define is_client_trace=/*
begin
&is_client_trace
dbms_output.put_line('"Этот код будет в виде комментария');
--*/
dbms_output.put_line('Оcновная логика ...');
end;
К сожалению, подобное можно сделать только в блоке PL/SQL, но не в потоке DDL-команд: SQL+ обрабатывает переменные замены только в составе какого-либо оператора. Если Вы знаете как это обойти, пожалуйста дайте мне знать об этом!
:-)
На фото - до боли знакомый графический SQL+, как его нам не хватает сегодня в 11g ...
:-)
Добрый день, Игорь,
ОтветитьУдалить> В данном случае код вообще не передается на сервер !
Код на сервер ведь передаётся в любом случае, просто в данном случае, он передаётся в виде коментария.
Согласен с вами !
ОтветитьУдалитьСпасибо - я подправил текст .
Не совсем понятно, что имелось ввиду под "К сожалению, подобное можно сделать только в блоке PL/SQL, но не в потоке DDL-команд: SQL+ обрабатывает переменные замены только в составе какого-либо оператора."
ОтветитьУдалитьНо вообще при "set define = on" или
set esc=\
set define=\&
работает нормально с чем угодно. Вот пример: создаем файлик с содержимым:
create table &tab1(&col1 number);
create table &tab2(&col2 number);
create table &tab3(&col3 number);
Теперь выполняем его:
DB11G/XTENDER> ed test_subst
DB11G/XTENDER> @test_subst
Enter value for tab1: a
Enter value for col1: a
old 1: create table &tab1(&col1 number)
new 1: create table a(a number)
Table created.
Elapsed: 00:00:00.02
Enter value for tab2: a
Enter value for col2: a
old 1: create table &tab2(&col2 number)
new 1: create table a(a number)
create table a(a number)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 11
ORA-00955: name is already used by an existing object
Elapsed: 00:00:00.00
Enter value for tab3: a
Enter value for col3: a
old 1: create table &tab3(&col3 number)
new 1: create table a(a number)
create table a(a number)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 11
ORA-00955: name is already used by an existing object
Elapsed: 00:00:00.01
Вы не поняли - я имел в виду именно условную компиляцию, а не препроцессинг символов подстановки.
ОтветитьУдалитьХотелось бы нечто подобное:
create table test
( id $if $$some_condition $then
NUMBER
$lse
VARCHAR2(32)
$end
);
Как это реализовать ?