2

有没有办法从 oracle 脚本中检测缺少的命令行参数

例如,我的 oracle 脚本 test.sql 需要运行 3 个参数。我的脚本是从安装程序执行的,如 sqlplus /NOLOG @test.sql userid pw tablespace 当缺少参数之一时,sqlplus 会提示输入用户输入。这无法从安装程序中识别。我需要在脚本中找到丢失的参数并以错误代码退出。可行吗?

4

2 回答 2

4

我不认为有办法直接用 sqlplus 做到这一点。您可以将 sqlplus 执行包装在检查参数的命令/shell 脚本中,然后使用经过验证的参数列表调用 sqlplus。

于 2009-05-22T19:09:14.623 回答
4

在 shell 脚本中包装对 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。在不知道参数的有效值是什么的情况下,很难知道省略了哪一个。

于 2009-05-22T20:00:48.467 回答