& 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
点(.)将点后面的每个非空格字符附加到输入的值.请注意点后的值表如何附加到输入的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都会将&符号视为替换字符,包括在字符串中.