oracle sqlplus вопрос командной строки - PullRequest
2 голосов
/ 22 мая 2009

Есть ли способ обнаружить пропущенные параметры командной строки из скрипта оракула

например, мой сценарий оракула test.sql ожидает запуска 3 параметров. мой скрипт выполняется из программы установки, как это sqlplus / NOLOG @ test.sql идентификатор пользователя pw табличного пространства Если один из параметров отсутствует, sqlplus запрашивает ввод пользователя. Это не может быть распознано из программы установки. Мне нужно найти пропущенный параметр внутри скрипта и выйти с кодом ошибки. Это возможно?

Ответы [ 2 ]

4 голосов
/ 23 мая 2009

Обращение к вызову sqlplus в сценарии оболочки кажется самым простым способом сделать это, но вы также можете вызвать сценарий с помощью:

sqlplus /NOLOG @test.sql <userid> <pw> <tablespace> empty empty empty 

и проверить внутри скрипта, равны ли какие-либо значения "пустым"? Таким образом, скрипт не будет зависать, даже если параметры не будут переданы, потому что у вас все еще будут три параметра заполнителя.

Вы можете проверить, используя что-то вроде этого: (использование && вместо & означает, что вам будет предложено ввести значение только один раз)

var status number;
set verify on
whenever sqlerror exit 1; 
begin
   :status := 0;
   select decode('&&1','empty',1,:status) into :status from dual;
   select decode('&&2','empty',2,:status) into :status from dual;
   select decode('&&3','empty',3,:status) into :status from dual;
   IF :status != 0 THEN
   RAISE_APPLICATION_ERROR (
   -20000+-1*:status,'parameter '|| :status || ' is missing');
   END IF;
end;
/

Возвращаемое значение, когда входные данные недействительны, будет 1. Не зная, какие допустимые значения для параметров, трудно определить, какое из них было опущено.

4 голосов
/ 22 мая 2009

Я не думаю, что есть способ сделать это напрямую с помощью sqlplus. Вы можете обернуть выполнение sqlplus в скрипт команды / оболочки, который проверяет параметры, а затем вызывает sqlplus со списком проверенных параметров.

...