使用 SQLPlus 时如何设置 Oracle 绑定变量?
Posted
技术标签:
【中文标题】使用 SQLPlus 时如何设置 Oracle 绑定变量?【英文标题】:How to set Oracle bind variables when using SQLPlus? 【发布时间】:2016-10-12 08:02:37 【问题描述】:例子:
SELECT orders.order_no FROM orders WHERE orders.order_date BETWEEN :v1 AND :v2
如何设置:v1
和:v2
的日期?
【问题讨论】:
可以定义为SQL>define v1=2
,以后可以定义为SQL>select * from emp where Id=&v1
。
The documentation 可以帮忙
【参考方案1】:
注意以下几点:
VARIABLE 是一个 SQLPlus 命令。不要以分号 (;) 结束。
在 VARIABLE 命令中,不要在变量名前加上 冒号 (:)。
绑定变量不能是“日期”数据类型 - 它们是某种 字符值。
因此,在您的代码中,您必须使用 to_date()
和
适当的格式模型或其他一些机制,将字符串转换为
日期。您的代码中当前缺少该内容。切勿将日期与
字符串!
下面的简短演示。
SQL> variable v1 varchar2(20)
SQL> exec :v1 := '2015/12/22';
PL/SQL procedure successfully completed.
SQL> select 1 as result from dual where to_date(:v1, 'yyyy/mm/dd') < sysdate;
RESULT
----------
1
【讨论】:
【参考方案2】:共同点 您可以使用 define 并使用带有 & 的变量
define x = 12 ;
select &x from dual;
或变量
variable x refcursor;
begin
open :x for select * from dual connect by level < 11;
end;
/
print x
【讨论】:
OP 专门询问了绑定变量——这比替换变量好得多。并且他/她询问在直接 SQL 查询中使用它们;refcursor
等是怎么回事?
OP 询问“使用 SQLPlus 时如何设置 Oracle 变量?”你在哪里找到单词绑定?对于他的问题,我添加了两种解决方案。我错了吗?
在代码和问题中 - 注意变量名称前的冒号? :v1
是一个绑定变量,不能混淆。
再看问题,在几个地方加上“bind”这个词就更清楚了。我会在一分钟内对其进行编辑以做到这一点。以上是关于使用 SQLPlus 时如何设置 Oracle 绑定变量?的主要内容,如果未能解决你的问题,请参考以下文章
转载Oracle sqlplus中最简单的一些命令,设置显示的格式