Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何替换变量语法'&;1.';适用于用户/模式delimeter(“;”;)_Database_Oracle_Sqlplus - Fatal编程技术网

Database 如何替换变量语法'&;1.';适用于用户/模式delimeter(“;”;)

Database 如何替换变量语法'&;1.';适用于用户/模式delimeter(“;”;),database,oracle,sqlplus,Database,Oracle,Sqlplus,我在甲骨文脚本中看到了这一行 SELECT COUNT(*) INTO version1 FROM &1..xxdt WHERE version = 3310; 我不理解&1..部分。我认为xxdt是表的名称,那么它前面的&1..是什么呢 我相信符号和用于替换变量。看 替代变量 替换变量是SQL*Plus工具的一项功能。他们有 与数据库服务器处理SQL的方式无关。 在语句中使用替换变量时,SQL*Plus会请求 输入值并重写语句以包含该值。重写的 语句被传递到数据库。因此,数据库服务器

我在甲骨文脚本中看到了这一行

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

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

我相信符号和用于替换变量。看

替代变量

替换变量是SQL*Plus工具的一项功能。他们有 与数据库服务器处理SQL的方式无关。 在语句中使用替换变量时,SQL*Plus会请求 输入值并重写语句以包含该值。重写的 语句被传递到数据库。因此,数据库服务器 对替换变量一无所知。下面的例子 通过重复上一个测试来说明这一点,这次使用 替代变量


&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提出了一个很好的建议,包括快速解释
集合定义
,它与变量替换密切相关。这是

上面的替换由SQLPlus完成,其行为可以使用
SET DEFINE
进行控制:

  • SET DEFINE ON
    将允许替换并使用已定义的替换字符。这通常是SQLPlus默认值,在运行上述查询时也是如此
  • SET DEFINE
    设置替换字符。符号(
    &
    )是通常的默认值。SQLPlus将只接受非字母数字、非空格字符作为替换字符。请注意,在使用Oracle的十多年中,我从未改变过这个值
  • 设置DEFINE OFF
    将停止替换。如果需要在查询或过程中使用实际的文字符号AND,请使用此选项,因为SQLPlus将把符号AND视为替换字符,无论您将其放置在何处,包括字符串中
如果SET CONCAT是一个句点(.),并且您希望在替换变量之后立即附加一个句点,则同时使用两个句点。例如:

define mycity = Melbourne
spool &mycity..log
同:

spool Melbourne.log

另一个例子: 在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
现在运行:

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
代码分解:

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
(&1)-第一个参数“listener”

(&2)-第二个参数“renamelistener”

(.log)-是&1的替代项

(.)-其中单点(.)附加非空格字符和传递参数值


谢谢

+1:您可能想添加一条关于使用SET DEFINE来更改使用的字符或禁用该功能的注释。谢谢,祝您通话愉快。我很少使用
SET DEFINE
,我从未想到:)我会将其添加到答案中。您的答案提供了
&var..
用法的示例(从文档中复制和粘贴),但您没有回答问题:什么是
&1..
1
是一个变量吗?