我在oracle脚本中看到了这一行
SELECT COUNT(*) INTO version1 FROM &1..xxdt WHERE version = 3310;
我不理解&1..
部分。我认为xxdt是表的名称,那么前面的&1..
是什么东西呢?
答案 0 :(得分:9)
&1
提示输入用户输入的值。请注意输入的值mytable
如何替换下面的&1
:
SQL> SELECT COUNT(*) FROM &1 WHERE col1 = 12;
Enter value for 1: mytable
old 1: SELECT COUNT(*) FROM &1 WHERE col1 = 12
new 1: SELECT COUNT(*) FROM mytable WHERE col1 = 12
COUNT(*)
----------
0
点(.
)将点后面的每个非空格字符附加到输入的值。请注意点后的值table
如何附加到输入的my
:
SQL> SELECT COUNT(*) FROM &1.table WHERE COL1 = 12;
Enter value for 1: my
old 1: SELECT COUNT(*) FROM &1.table WHERE COL1 = 12
new 1: SELECT COUNT(*) FROM mytable WHERE COL1 = 12
COUNT(*)
----------
0
&1..xxdt
中的两个点不是特殊运算符。第一个点意味着追加;第二个点是字面的。看起来示例中的&1
用于提示架构/所有者名称。请注意下面我输入ed
和&1..mytable
的方式已转换为ed.mytable
:
SQL> SELECT COUNT(*) FROM &1..mytable WHERE COL1 = 12;
Enter value for 1: ed
old 1: SELECT COUNT(*) FROM &1..mytable WHERE COL1 = 12
new 1: SELECT COUNT(*) FROM ed.mytable WHERE COL1 = 12
COUNT(*)
----------
0
附录:David Aldridge提出的一个很好的建议是快速解释SET DEFINE
,它与变量替换相辅相成。这就是......
上述替换由SQLPlus完成,其行为可以使用SET DEFINE
控制:
SET DEFINE ON
将允许替换并使用定义的替换字符。这通常是SQLPlus的默认值,当我运行上面的查询时就是这种情况。SET DEFINE <char>
设置替换字符。 &符号(&
)是通常的默认值。 SQLPlus仅接受替换字符的非字母数字,非空格字符。请注意,在使用Oracle十多年的时间里,我从来没有必要更改此值。SET DEFINE OFF
将停止替换。如果你需要在查询或proc中使用实际的文字&符号,请使用此选项,因为无论你把它放在哪里,SQLPlus都会将&符号视为替换字符,包括在字符串中。答案 1 :(得分:0)
我相信&符号用于替换变量。见http://www.oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables.php
替换变量
替换变量是SQL * Plus工具的一项功能。他们有 与数据库服务器处理SQL的方式无关。 在语句中使用替换变量时,SQL * Plus会请求 输入值并重写语句以包含它。改写了 语句传递给数据库。结果,数据库服务器 对替换变量一无所知。以下示例 通过重复之前的测试来说明这一点,这次使用 替代变量。
答案 2 :(得分:0)
如果SET CONCAT是句点(。)并且您想要在替换变量之后立即附加句点,则一起使用两个句点。例如:
define mycity = Melbourne
spool &mycity..log
与:
相同spool Melbourne.log
https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#9_7
答案 3 :(得分:0)
在vi编辑器中使用以下查询创建一个run.sql文件:
vi run.sql
select 'mv &1..log &2._' ||to_char(sysdate,'DD-MON-YYYY-HH24-MI') || '.log' from dual;
:wq
现在运行:
sqlplus scott/tiger @run.sql listener renamelistener
代码分解:
(&amp; 1) - 第一个参数“listener”
(&amp; 2) - 第二个参数“renamelistener”
(。log) - 替换为&amp; 1
(。) - 单点(。)附加带有传递参数值的非空格字符
谢谢!