oracle sqlplus命令行问题

时间:2009-05-22 18:33:14

标签: oracle sqlplus

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

在shell脚本中包含对sqlplus的调用似乎是最简单的方法,但您也可以使用以下方法调用脚本:

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

并检查脚本内是否有任何值等于“空”?这样,即使没有参数传递,脚本也不会挂起,因为你仍然有三个填充参数。

您可以使用以下内容进行检查:(使用&amp;&amp;而不是&amp;意味着只会提示您输入一次值)

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.不知道参数的有效值是什么,很难知道哪一个被省略了。