Tar*_*run 6 oracle variables plsql sqlplus declaration
这两个变量声明有什么区别?
1:num number:='&&num';
2:variable num1 number;
因为在这两种情况下我都可以num通过使用&num或&&num在其他文件中引用,并且在绑定变量的情况下:num1.
此外,我还有一个困惑:以下任何一种陈述是否有所不同,它们是否都有效,它们是否意味着同样的事情?
1:variable num1 number;
2:var num1 number;
Luk*_*ard 29
您似乎对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
请注意,SQL*Plus将替换变量替换为其文本值,而不考虑它是否为我们提供了有效的SQL.在上面的例子中,我们省略了单引号&subvar,它给了我们无效的SQL,所以我们得到了一个错误.
这些行开始old并向new我们显示我们在SQL*Plus应用替换变量之前和之后输入的行.该new行是数据库尝试运行的行.
您可以使用和启用或禁用old和new行的显示.您还可以使用和打开或关闭替换变量的替换.SET VERIFY ONSET VERIFY OFFSET DEFINE ONSET 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
如果&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并且var num1 number都意味着同样的事情.它们都定义了num1类型的绑定变量number. var只是一个缩写variable.
| 归档时间: |
|
| 查看次数: |
23519 次 |
| 最近记录: |