英文:
SQLPLUS use optional parameters
问题
CMD代码:
REM 这个部分有效
sqlplus !dbuser! @!some_dir!\some_sql_file.sql test_text >> !log!
REM 这个部分会停止并等待用户交互
sqlplus !dbuser! @!some_dir!\some_sql_file.sql >> !log!
SQL代码:
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;
英文:
Currently, I call an SQL File from a CMD file and transfer some parameters during the call. The code below works if I actually pass a value or press enter. However, my CMD/SQL will stop and wait for the parameter if there was none given. In such a case I would like to continue with default values instead.
CMD Code:
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!
SQL Code:
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 ;
答案1
得分: 2
参数不能为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:\temp>sqlplus -s scott/tiger@pdb1 @a.sql littlefoot
SQL uses: littlefoot
PL/SQL procedure successfully completed.
不带参数:
c:\temp>sqlplus -s scott/tiger@pdb1 @a.sql
SQL uses: no_text_given
PL/SQL procedure successfully completed.
c:\temp>
如果需要,请进行调整(例如,重定向到文件;删除我使用的各种set
设置等等),但总的来说,这就是您要求的内容。
英文:
Parameter can't be 3
; there's only one, so it is supposed to be 1
.
Here's option you might be interested in.
a.sql
file:
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;
Let's test it: with parameter passed to it:
c:\temp>sqlplus -s scott/tiger@pdb1 @a.sql littlefoot
SQL uses: littlefoot
PL/SQL procedure successfully completed.
Without parameter:
c:\temp>sqlplus -s scott/tiger@pdb1 @a.sql
SQL uses: no_text_given
PL/SQL procedure successfully completed.
c:\temp>
Adjust it, if you have to (e.g. redirect to file; remove various set
tings I used, ...) but - generally - that's what you asked for.
答案2
得分: 0
在 cmd
中,
如果未定义参数,则设置 "parameter=defaultvalue"
sqlplus !dbuser! @!some_dir!\some_sql_file.sql !parameter! >> !log!
如果 parameter
未设置,将使用默认值。您尚未向我们展示如何将 test_text
提供给 cmd
过程;您需要将其值分配给 parameter
。
英文:
In cmd
,
if not defined parameter set "parameter=defaultvalue"
sqlplus !dbuser! @!some_dir!\some_sql_file.sql !parameter! >> !log!
if parameter
has not been set, uses default. You haven't shown us how you provide test_text
to the cmd
procedure; you would need to assign its value to parameter
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论