【问题标题】:SQLPLUS use optional parametersSQLPLUS 使用可选参数
【发布时间】:2023-02-07 05:21:03
【问题描述】:

目前,我从 CMD 文件调用 SQL 文件并在调用过程中传输一些参数。如果我实际传递一个值或按回车键,下面的代码将起作用。但是,如果没有给出参数,我的 CMD/SQL 将停止并等待参数。在这种情况下,我想继续使用默认值。

命令代码:

REM this works
sqlplus !dbuser! @!some_dir!\some_sql_file.sql test_text >> !log!

REM this STOPS and waits until user interaction happens
sqlplus !dbuser! @!some_dir!\some_sql_file.sql >> !log!

查询代码:

set serveroutput on

SET LINESIZE 10000

declare
    l_some_text varchar2(1000);
begin

     select nvl('&&3','no_text_given') into l_some_text from dual;

    dbms_output.enable;
    dbms_lock.sleep(1);
    dbms_output.put_line('SQL uses: ' || l_some_text );

end ;

【问题讨论】:

    标签: sql oracle batch-file sqlplus


    【解决方案1】:

    参数不能是3;只有一个,所以它应该是1


    这是您可能感兴趣的选项。

    a.sql文件:

    set serveroutput on
    set ver off
    
    set termout off
      column 1 new_value 1
      select null as "1" from dual where 1 = 2;
    set termout on
    
    declare
        l_some_text varchar2(1000);
    begin
       select nvl('&1', 'no_text_given') into l_some_text from dual;
       dbms_output.put_line('SQL uses: ' || l_some_text );
    end ;
    /
    exit;
    

    让我们测试一下:带参数传递给它:

    c:	emp>sqlplus -s scott/tiger@pdb1 @a.sql littlefoot
    SQL uses: littlefoot
    
    PL/SQL procedure successfully completed.
    

    无参数:

    c:	emp>sqlplus -s scott/tiger@pdb1 @a.sql
    SQL uses: no_text_given
    
    PL/SQL procedure successfully completed.
    
    
    c:	emp>
    

    如果必须,请调整它(例如,重定向到文件;删除我使用的各种 settings,...),但是 - 通常 - 这就是您所要求的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多