【问题标题】:oracle sqlplus command line questionoracle sqlplus 命令行问题
【发布时间】:2009-07-01 22:59:47
【问题描述】:

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

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

【问题讨论】:

    标签: oracle sqlplus


    【解决方案1】:

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

    【讨论】:

    • 实际上我们修改安装以在调用脚本之前验证输入参数的数量。这似乎是最好的选择..
    【解决方案2】:

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

    【讨论】:

    • 这很好用,直到您需要传入的值之一是“空”。您必须选择一个无意义的字符串才能安全,而且它很难看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多