如何在 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 中绑定变量的主要内容,如果未能解决你的问题,请参考以下文章