在下面的PL / SQL块中,在WHERE子句中使用了绑定变量:
declare
symbol varchar2(6) := 'EPIC';
begin
execute immediate 'delete from stock where symbol = :symbol'
using symbol;
end;
/
此块成功执行,但是,类似以下内容的操作将失败:
declare
symbol varchar2(15) := 'employees';
begin
execute immediate 'delete from :symbol where last_name = ''Kochar'''
using symbol
end;
/
我的问题是:除了像第一个示例中那样将值传递给WHERE子句之外,我们还可以在任何其他上下文中使用绑定变量吗?
答案 0 :(得分:2)
绑定变量仅传输值。
它允许重复使用相同的查询,但是使用不同的值。
表名不是值。
答案 1 :(得分:2)
您只能将那些表达式(文字, 变量,复杂表达式)替换数据的占位符 动态字符串中的值。您不能绑定名称 SQL的架构元素(表,列等)或整个块 声明。对于字符串的那些部分,必须使用 串联(运算符)
因此,请按以下说明使用:
SQL> create table employees(empid int,last_name varchar2(50));
Table created
SQL> insert into employees values(111,'Kochar');
1 row inserted
SQL> select * from employees;
EMPID LAST_NAME
----- ----------
111 Kochar
SQL>
SQL> declare
2 symbol varchar2(15) := 'employees';
3 begin
4 execute immediate 'delete '||symbol||' where last_name = ''Kochar''';
5 end;
6 /
PL/SQL procedure successfully completed
SQL> select * from employees;
EMPID LAST_NAME
----- ----------
-- i.e. no row(s) returned.