Обращение к вызову 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. Не зная, какие допустимые значения для параметров, трудно определить, какое из них было опущено.