如何在 sql/pl sql 中绑定变量

Posted

技术标签:

【中文标题】如何在 sql/pl sql 中绑定变量【英文标题】:how to bind varible in sql/plsql 【发布时间】:2018-02-15 09:37:23 【问题描述】:

我的查询是

with dates_table as (
                 SELECT to_date(:begin_date, 'dd/mm/yyyy') + ROWNUM - 1 cal_day
                        FROM dual
                  CONNECT BY LEVEL <= to_date(:end_date, 'dd/mm/yyyy') - to_date(:begin_date, 'dd/mm/yyyy') + 1)
    SELECT '1' AS ID,
           'bank' AS DESC,
           cal_day AS dates,
           (SUM (
               CASE
                  WHEN S_DATE BETWEEN ADD_MONTHS (cal_day, 0) - 13
                                  AND ADD_MONTHS (cal_day, 0) - 7
                  THEN
                     VOLUME
                  ELSE
                     0
               END))
              LAST_14_days,
           (SUM (
               CASE
                  WHEN S_DATE BETWEEN ADD_MONTHS (cal_day, 0) - 6
                                  AND ADD_MONTHS (cal_day, 0)
                  THEN
                     VOLUME
                  ELSE
                     0
               END))
              last 7day
      FROM abc, day
      where day.cal_day between '13-NOV-16' and '22-MAR-17'
      group by cal_day
      order by cal_day

【问题讨论】:

好的,这就是您的问题...那么您的问题是什么? 你能告诉我如何在那个查询中绑定变量..我是 sql/plsql 的新手 那里没有定义变量。您是在谈论定义自己的变量并想要使用它的 PL/SQL 块吗?您是在谈论函数或过程中的 PL/SQL 块并且您正在尝试使用参数吗?您是否尝试从另一种语言运行 SQL 语句并想知道如何使用参数化查询?上下文很重要...... 所以我猜你想以某种方式将cal_day 作为参数传递。这要怎么称呼?它是交互式报表、Java 应用程序、批处理 ETL 流程的一部分吗? @WilliamRobertson Talend ETL 流程 【参考方案1】:

您可以将上面的参数 sql 替换为以下内容:

SELECT to_date('&&begin_date', 'dd/mm/yyyy') + ROWNUM - 1 cal_day
                        FROM dual
                  CONNECT BY LEVEL <= to_date('&&end_date', 'dd/mm/yyyy') - to_date('&&begin_date', 'dd/mm/yyyy') + 1)
....

对于数值,您可以直接定义不带单引号的变量'',但您应该为日期或字符串类型参数添加引号。在每种情况下都使用double ampersand,这样重复参数(您有多个:begin_date)不会提示您(通常,您也可以使用single ampersand,但在这种情况下,您甚至会被提示输入每个参数如果它们相同)

【讨论】:

Talend 了解并允许您提供替换变量,但不能提供绑定变量? 是的,它接受绑定变量!像上面的解决方案。感谢您的帮助

以上是关于如何在 sql/pl sql 中绑定变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在pl/sql中执行绑定变量?

如何使用绑定变量执行 SQL 脚本

如何将 R 会话中的值替换为 SQL 绑定变量占位符?

如何将日期和其他变量绑定到 php sql 查询? (MySql)

Oracle - 如何使用动态绑定参数定义动态 SQL?

如何将绑定变量传递给 for 循环的视图