Oracle数据库中& 1 ..的含义是什么

时间:2013-06-11 19:13:03

标签: database oracle

我在oracle脚本中看到了这一行

SELECT COUNT(*) INTO version1 FROM &1..xxdt WHERE version = 3310;

我不理解&1..部分。我认为xxdt是表的名称,那么前面的&1..是什么东西呢?

4 个答案:

答案 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

(。) - 单点(。)附加带有传递参数值的非空格字符

谢谢!