【问题标题】: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,...),但是 - 通常 - 这就是您所要求的。