tag:blogger.com,1999:blog-5280412311812666502.post312256007145899841..comments2023-06-11T06:02:25.832-07:00Comments on Life in Oracle: Условная компиляция в SQL+Igor Melnikovhttp://www.blogger.com/profile/14474629761582968538noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-5280412311812666502.post-54907354006081200272012-04-01T12:51:51.588-07:002012-04-01T12:51:51.588-07:00Вы не поняли - я имел в виду именно условную компи...Вы не поняли - я имел в виду именно условную компиляцию, а не препроцессинг символов подстановки.<br />Хотелось бы нечто подобное:<br /><br />create table test<br /> ( id $if $$some_condition $then <br /> NUMBER<br /> $lse<br /> VARCHAR2(32)<br /> $end<br />);<br /><br />Как это реализовать ?Igor Melnikovhttps://www.blogger.com/profile/14474629761582968538noreply@blogger.comtag:blogger.com,1999:blog-5280412311812666502.post-36052909969829848882012-03-23T15:53:00.862-07:002012-03-23T15:53:00.862-07:00Не совсем понятно, что имелось ввиду под "К с...Не совсем понятно, что имелось ввиду под <i>"К сожалению, подобное можно сделать только в блоке PL/SQL, но не в потоке DDL-команд: SQL+ обрабатывает переменные замены только в составе какого-либо оператора."</i><br />Но вообще при "set define = on" или <br />set esc=\<br />set define=\&<br />работает нормально с чем угодно. Вот пример: создаем файлик с содержимым:<br />create table &tab1(&col1 number);<br />create table &tab2(&col2 number);<br />create table &tab3(&col3 number);<br />Теперь выполняем его:<br />DB11G/XTENDER> ed test_subst<br /><br />DB11G/XTENDER> @test_subst<br />Enter value for tab1: a<br />Enter value for col1: a<br />old 1: create table &tab1(&col1 number)<br />new 1: create table a(a number)<br /><br />Table created.<br /><br />Elapsed: 00:00:00.02<br />Enter value for tab2: a<br />Enter value for col2: a<br />old 1: create table &tab2(&col2 number)<br />new 1: create table a(a number)<br />create table a(a number)<br /> *<br />ERROR at line 1:<br />ORA-00604: error occurred at recursive SQL level 1<br />ORA-06502: PL/SQL: numeric or value error<br />ORA-06512: at line 11<br />ORA-00955: name is already used by an existing object<br /><br /><br />Elapsed: 00:00:00.00<br />Enter value for tab3: a<br />Enter value for col3: a<br />old 1: create table &tab3(&col3 number)<br />new 1: create table a(a number)<br />create table a(a number)<br /> *<br />ERROR at line 1:<br />ORA-00604: error occurred at recursive SQL level 1<br />ORA-06502: PL/SQL: numeric or value error<br />ORA-06512: at line 11<br />ORA-00955: name is already used by an existing object<br /><br /><br />Elapsed: 00:00:00.01Sayan Malakshinovhttps://www.blogger.com/profile/11087163803358489777noreply@blogger.comtag:blogger.com,1999:blog-5280412311812666502.post-6430292834662484502011-05-10T00:32:46.597-07:002011-05-10T00:32:46.597-07:00Согласен с вами !
Спасибо - я подправил текст .Согласен с вами !<br />Спасибо - я подправил текст .Igor Melnikovhttps://www.blogger.com/profile/14474629761582968538noreply@blogger.comtag:blogger.com,1999:blog-5280412311812666502.post-19623843455787466042011-05-10T00:05:29.050-07:002011-05-10T00:05:29.050-07:00Добрый день, Игорь,
> В данном случае код вооб...Добрый день, Игорь,<br /><br />> В данном случае код вообще не передается на сервер !<br /><br />Код на сервер ведь передаётся в любом случае, просто в данном случае, он передаётся в виде коментария.Edgar Chupithttps://www.blogger.com/profile/13293767801210518316noreply@blogger.com