使用 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 的sql*plus问题

转载Oracle sqlplus中最简单的一些命令,设置显示的格式

如何使用 SQLPlus 查看 Oracle 存储过程?

oracle sqlplus login.sql设置

如何使用 python 子进程模块将 sqlplus 作为 sudo 连接到 oracle 用户?

sqlplus多行代码怎么