绑定变量和替换变量(我使用 && 输入)之间有什么区别?

2023-11-27

这两个变量声明有什么区别?

1: num number:='&&num';
2: variable num1 number;

因为在这两种情况下我都可以参考num通过使用&num or &&num在其他文件中也, 对于绑定变量:num1.

此外,我还有一个困惑:以下任何陈述是否有所不同,它们是否都有效并且含义相同吗?

1: variable num1 number;
2: var num1 number;


您似乎对之间的差异有些困惑绑定变量在甲骨文中和替代变量在 SQL*Plus 中。

让我们从替换变量开始。替换变量是 SQL*Plus 所特有的,并且不是数据库的一部分。例如,如果您尝试将它们与 JDBC 一起使用,它们将无法工作。

替换变量只能保存一段文本。如果 SQL*Plus 在输入行中遇到替换变量,它将用其文本内容替换该变量:



SQL> define subvar=X
SQL> select * from dual where dummy = &subvar;
old   1: select * from dual where dummy = &subvar;
new   1: select * from dual where dummy = X
select * from dual where dummy = X
                                 *
ERROR at line 1:
ORA-00904: "X": invalid identifier
  

请注意,SQL*Plus 用其文本值替换了我们的替换变量,而不考虑它是否为我们提供了有效的 SQL。在上面的例子中,我们省略了单引号&subvar它给了我们无效的 SQL,所以我们得到了一个错误。

行开始old and new显示 SQL*Plus 应用替换变量之前和之后输入的行。这newline 是数据库尝试运行的行。

您可以启用或禁用该显示old and new线路使用SET VERIFY ON and SET VERIFY OFF。您还可以使用以下命令打开或关闭替换变量的替换SET DEFINE ON and SET DEFINE OFF.

如果我们想使用替换变量运行上面的查询,我们必须在它周围加上引号:



SQL> select * from dual where dummy = '&subvar;';
old   1: select * from dual where dummy = '&subvar;'
new   1: select * from dual where dummy = 'X'

D
-
X
  

If &subvar恰好包含一个有效数字的字符串(例如5),那么我们就可以不使用引号了,但这只是因为取出了文本&subvar并将其替换为文本5恰好给了我们有效的 SQL。

例如,假设我们有一个名为test其中包含以下数据:



         A
----------
         1
         2
         3
         4
         5
  

那么我们可以做



SQL> define subvar=5
SQL> select * from test where a = &subvar;
old   1: select * from test where a = &subvar;
new   1: select * from test where a = 5

         A
----------
         5
  

另一方面,绑定变量有类型。它们不是简单的文本值。它们的值被发送到数据库,数据库也可以设置它们的值。



SQL> variable bindvar varchar2(1);
SQL> exec :bindvar := 'X';

PL/SQL procedure successfully completed.
  

当你想使用绑定变量时,不要在它周围加上引号:



SQL> select * from dual where dummy = :bindvar;

D
-
X

SQL> select * from dual where dummy = ':bindvar';

no rows selected
  

在上面的第二个示例中,我们没有返回任何行,因为DUAL表中没有行DUMMY包含文本的列:bindvar.

如果您尝试将错误类型的值分配给绑定变量,您将收到错误消息:



SQL> variable bindvar number;
SQL> exec :bindvar := 'X';
BEGIN :bindvar := 'X'; END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
  

绑定变量是数据库的标准部分,您可以将它们与 JDBC 或您选择的任何连接数据库的方法一起使用。


最后,variable num1 number and var num1 number两者的意思是一样的。他们都定义了一个绑定变量num1类型的number. var只是一个缩写variable.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定变量和替换变量(我使用 && 输入)之间有什么区别? 的相关文章