argument 命令在 SQL*Plus 23c 和 SQLcl 22.4 中允许我们管理传递给脚本的参数。这包括如果参数缺失时的提示或默认值,以及是否应将来自提示的用户输入回显到屏幕上。
请记住,SQLcl 是独立于数据库发布的,因此我们可以针对从 11.2 版本开始的任何数据库版本使用 argument 命令。
PROMPT 选项
argument 命令的 PROMPT 选项允许我们设置当命令行中缺少参数时所显示的提示文本。
创建一个名为 "test.sql" 的文件,并添加以下内容。
set verify off
argument 1 prompt "Enter a value for the first argument:"
column arguments format a10
select '&1' as arguments;
undefine 1
让我们来分解一下上面的 sql。
我们测试一下这个 sql 脚本。
在第一个示例中,系统会提示我们输入参数。我们输入值“banana”。
SQL> @test.sql
Enter a value for the first argument:banana
ARGUMENTS
----------
banana
在第二个示例中,系统会提示我们输入参数。我们输入值“apple”。
SQL> @test.sql
Enter a value for the first argument:apple
ARGUMENTS
----------
apple
在第三个示例中,我们在命令行上提供了值“pear”,并且不会提示我们输入值。
SQL> @test.sql pear
ARGUMENTS
----------
pear
1 row selected.
PROMPT和HIDE(仅限SQL*Plus)
在 argument 命令中添加 HIDE 关键字意味着我们输入的文本不再回显到屏幕上。这在输入密码时非常有用。我们修改了前面的脚本以添加 HIDE 关键字。
set verify off
argument 1 prompt "Enter a value for the first argument:" hide
column arguments format a10
select '&1' as arguments;
undefine 1
我们测试修改后的脚本。
在第一个示例中,系统会提示输入参数,我们输入值“secret”。请注意,这不会在屏幕上显示。
SQL> @test.sql
Enter a value for the first argument:
ARGUMENTS
----------
secret
1 row selected.
在第二个示例中,我们在命令行上提供了值“secret2”,并且不会提示我们输入值。
SQL> @test.sql secret2
ARGUMENTS
----------
secret2
1 row selected.
DEFAULT 默认值
DEFAULT 关键字允许我们定义一个默认值,以便在未指定参数的情况下使用。我们修改了前面的脚本以分配一个默认值。
set verify off
argument 1 default "banana"
column arguments format a10
select '&1' as arguments;
undefine 1
我们测试修改后的脚本。如果我们不提供命令行参数,则使用默认值“banana”。如果我们提供命令行参数,就会使用它。
SQL> @test.sql
ARGUMENTS
----------
banana
1 row selected.
SQL> @test.sql apple
ARGUMENTS
----------
apple
1 row selected.
SQL>
argument 与 define 一起使用
在前面的示例中,我们直接使用了参数,但也可以将它们与DEFINE命令一起使用。我们修改了测试脚本,给出了以下内容。在本例中,我们使用了第一个参数来定义“arg1”,并在随后的查询中使用。
set verify off
argument 1 prompt "Enter a value for arg1:"
define arg1 = '&1';
column arguments format a10
select '&arg1' as arguments;
undefine 1
我们测试修改后的脚本,结果正如我们预期一样。
SQL> @test.sql
Enter a value for arg1:banana
ARGUMENTS
----------
banana
1 row selected.
SQL> @test.sql apple
ARGUMENTS
----------
apple
1 row selected.
SQL>
argument 与 variable 一起使用
我们还可以将参数与 SQL*Plus 和 SQLcl 中定义的变量一起使用。我们修改测试脚本,为其提供以下内容。在此示例中,我们定义了一个名为“var1”的变量,并将其设置为第一个参数的值。我们在后续查询中使用该变量。
variable var1 varchar2(10);
set verify off
argument 1 prompt "Enter a value for var1:"
set feedback off
exec :var1:= '&1';
set feedback on
column arguments format a10
select :var1 as arguments;
undefine 1
我们测试了修改后的脚本,结果正如我们预期一样。
SQL> @test.sql
Enter a value for var1:banana
ARGUMENTS
----------
banana
1 row selected.
SQL> @test.sql apple
ARGUMENTS
----------
apple
1 row selected.
SQL>