PL/SQL 中的变量;总是绑定变量?

Posted

技术标签:

【中文标题】PL/SQL 中的变量;总是绑定变量?【英文标题】:Variables in PL/SQL; always bind variables? 【发布时间】:2015-08-19 15:29:07 【问题描述】:

我读到了这个问题:Are PL/SQL variables in cursors effectively the same as bind parameters?

给出的答案非常好。我不想使用该线程并要求澄清(如规则所述),而是希望在此处进行澄清。 我们应该(可以)假设 PL/SQL 语句中的每个变量都是绑定变量吗?

【问题讨论】:

【参考方案1】:

是的,只要我们在嵌入式 SQL 中使用 PL/SQL 变量,它就是绑定变量。

如果我们不在SQL中使用它,那么它当然只是一个变量,因为绑定变量只是一个SQL的东西。一旦我们在 PL/SQL 包、函数或其他任何东西的 SQL 中使用它,它就会成为 SQL 引擎的绑定变量。

declare
  v_one    varchar2(100);
  v_two    varchar2(100);
  v_three  varchar2(100);
begin
  v_one := 'one';
  v_two := 'two';

  select col_three into v_three from mytable where col_one = v_one;
end;

v_one、v_two 和 v_three 都是 PL/SQL 变量。但是,我们的 PL/SQL 块中有 SQL,我们在 WHERE 子句中使用了v_one。所以v_one 是该 SQL 语句中的绑定变量。 (v_three 只是查询的返回值。into v_three 不是 SQL,而是 PL/SQL,因为 SQL 不知道 INTO 关键字。)v_two 甚至没有在任何 SQL 中使用,所以它从未被使用作为绑定变量。

【讨论】:

以上是关于PL/SQL 中的变量;总是绑定变量?的主要内容,如果未能解决你的问题,请参考以下文章

sqlplus pl/sql Date/Time 用户输入理解为绑定变量

在 Oracle PL/SQL 中重用绑定变量

这个 PL/SQL 有啥问题?绑定变量 * 未声明

Oracle ApeX (PL/SQL) - 从 JavaScript 变量中创建绑定变量

如何使用绑定变量使整个 PL/SQL 代码块动态化?

PL/SQL 绑定变量的问题