1

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

4

2 回答 2

2

绑定变量只是传输值。

它允许重用相同的查询,但具有不同的值。

表名不是值。

于 2018-07-04T04:33:58.860 回答
2

您只能将那些替换动态字符串中数据值的占位符的表达式(文字、变量、复杂表达式)绑定到您的 SQL 语句中。您不能绑定模式元素(表、列等)的名称或 SQL 语句的条目块。对于字符串的这些部分,您必须使用 concatenation(operator)

所以使用如下:

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.
于 2018-07-04T05:27:18.113 回答