适当使用绑定变量

时间:2018-07-04 03:44:12

标签: oracle plsql dynamic-sql bind-variables

在下面的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子句之外,我们还可以在任何其他上下文中使用绑定变量吗?

2 个答案:

答案 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.