【问题标题】:How to set Oracle bind variables when using SQLPlus?使用 SQLPlus 时如何设置 Oracle 绑定变量?
【发布时间】:2016-10-12 08:02:37
【问题描述】:

使用 SQLPlus 时如何设置 Oracle 绑定变量?

例子:

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 可以帮忙

标签: oracle sqlplus


【解决方案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”这个词就更清楚了。我会在一分钟内对其进行编辑以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2018-10-27
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多