2014-11-25 2 views
2

Я звоню процедуру в сценарии и передачи переменного, как это:Как установить значение по умолчанию для параметра отсутствует заместительная

@@./procedudure.sql 'var1' 'var2' 'var3' 

В процедуре я использую значение, как это:

DEFINE variable1 = '&1' 
DEFINE variable2 = '&2' 
DEFINE variable3 = '&3' 
... 
insert into TABLE (id, text) values ('&varibale1', '&variable2&variable3') 

Я хочу, чтобы иметь возможность вызывать процедуру только с двумя параметрами вместо 3, так что последняя заменяется пустой строкой. Но когда я называю это так, я получаю эту подсказку:

Enter value for 3: 

Я также пытался использовать параметры, как это, но с тем же результатом:

DEFINE variable2 = '&2' || '&3' 

Я нашел это страницы для использования запроса для отсутствующей переменной, но не удалось найти нигде, как установить значение по умолчанию: https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#9_14

Как вы можете видеть из кода, я хочу, чтобы последние параметры были объединены. Это должно быть обходным путем для ограничения на 240 символов.

ответ

1

При написании кода DEFINE variable3 = '&3' в вашей процедуре система считает, что 3 является переменной и она всегда запрашивает ее значение.

В случае, если вы хотите передать значение по умолчанию для 3, вы должны сделать DEFINE 3 = YOUR_VALUE_FOR_PARAM_3

+0

& 3 Является переменной. Это может быть не определено. – NeplatnyUdaj

+0

Да, когда он не определен и вы вызываете proc из командной строки, он всегда будет предлагать ввести значение, a.k.a, определяющее переменную. Вот почему его определение в процедуре не приведет к приглашению и также будет действовать как значение по умолчанию. – Shankar

+0

Но как я могу заменить значение по умолчанию фактическим '& 3', если он определен? – NeplatnyUdaj

1

В примере ссылке, раздел 9.14, я не вижу, где он использует значение по умолчанию любого. Он просто либо просит его, либо принимает параметр. SQLPLUS всегда будет запрашивать любые & 1, & 2, .. он видит в вашем файле, если он не указан как входной параметр. Независимо от того, как и где вы его используете. Это не похоже на Bash, где он просто заменяет $ 1 нулевым и ничего не делает. Я не думаю, что вы можете отключить автозадание в SQLPLUS.

+0

Это не очень хорошая новость :(Любая идея, как решить мою проблему? Я знаю, что могу передавать более длинные переменные в файлах, но в моем случае это означало бы очень большой рефакторинг сценариев установки, и это было бы гораздо менее удобочитаемо. – NeplatnyUdaj

+0

Вот как это работает. Причина, по которой это делается, заключается в том, чтобы подчеркнуть, что с параметрами что-то не так: параметры X задаются, и XY дается ... что является ошибкой! Что вы можете сделать в своем случае? , рассмотрите добавление параметра слишком много.Казу: четвертый.Но только при вызове.Если «var3» заканчивается пустым (так я понял, что ваш код работает), может быть «var4», и это может действительно, является значением по умолчанию. И если «var3» (и var1 и var2) не являются пустыми, var4 просто игнорируется. Хорошая идея? – tvCa

+0

Да.Это сработает, но мне придется изменить все сценарии установки и заставить других разработчиков добавить дополнительный параметр. Мы говорим о пакетах переводов, так что это тысячи записей. Я считаю это последней инстанцией – NeplatnyUdaj