Oracle 绑定变量和替换变量(我使用&;&;)之间有什么区别?
这两个变量声明之间的区别是什么 1:Oracle 绑定变量和替换变量(我使用&;&;)之间有什么区别?,oracle,variables,plsql,declaration,sqlplus,Oracle,Variables,Plsql,Declaration,Sqlplus,这两个变量声明之间的区别是什么 1:num编号:='&&num' 2:变量num1编号 因为在这两种情况下,我也可以通过在其他文件中使用&num或&num来引用num, 对于绑定变量:num1 此外,我还有一个困惑:下面的陈述是否有所不同,它们是否都有效,它们的意思是否相同 1:变量num1编号 2:var num1编号对于Oracle中的绑定变量和SQL*Plus中的替换变量之间的差异,您似乎有些困惑 让我们从替换变量开始。替换变量是SQL*Plus独有的,不是数据库的一部分。例如,如果您尝试
num编号:='&&num'代码>
2:变量num1编号代码>
因为在这两种情况下,我也可以通过在其他文件中使用&num
或&num
来引用num
,
对于绑定变量:num1
此外,我还有一个困惑:下面的陈述是否有所不同,它们是否都有效,它们的意思是否相同
1:变量num1编号代码>
2:var num1编号代码>对于Oracle中的绑定变量和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
如果&subvar
恰好包含一个有效数字的字符串(例如5
),那么我们可以不使用引号就可以离开,但这只是因为取出文本&subvar
并用文本5
替换它恰好为有效的SQL
例如,假设我们有一个名为test
的表,其中包含以下数据:
A
----------
1
2
3
4
5
绑定变量是数据库的标准部分,您可以将它们与JDBC或您选择的任何连接到数据库的方法一起使用
最后,变量num1数
和变量num1数
的含义相同。它们都定义了类型为number
的绑定变量num1
var
只是variable
的缩写
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
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