条款中Oracle的变量值

时间:2018-02-13 02:30:04

标签: oracle plsql

我试图在我的Select语句where子句

中传递一个变量值
onchange

在toad中弹出过滤窗口(我该如何避免)

DATE_DIM表如下所示

Declare v_WK varchar(20);
exec :v_WK :='Wk 6'

Select * from myTable Where Column = :v_Wk

事实表就像

UNIQUE_ID   WEEK_NAME   WEEK_BEGIN  WEEK_END
1   Week 6, 2018    20180205    20180211
2   Week 5, 2018    20180129    20180204
3   Week 4, 2018    20180122    20180128
4   Week 3, 2018    20180115    20180121

这里我需要像

这样的输出
ACCT_ID WEEK_NAME   SALES
10001   20180205    10
10001   20180206    20
10001   20180207    10
10001   20180208    15
1002    20180129    100
1002    20180130    100
1002    20180131    100
1002    20180132    100

所以基本上我想循环每个ACCT_ID,如

ACCT_ID WEEK_NAME   SALES
10001   Week 6, 2018    55
1002    Week 5, 2018    406

这就是我试过的

SELECT *
FROM Fact_Table
where Week_Name between (Select Week_Begin from DATE_DIM WHERE WEEk_NAME =: v_Wknm) /* Here I will have to loop Each Week_name for Each Acct_ID */

我在PLSQL中没有像MSSQL那样有点方便,对不起,如果这是一个简单的问题

1 个答案:

答案 0 :(得分:1)

您可以使用VARIABLE命令来定义绑定变量。另请注意,您应该使用VARCHAR2。在Toad中,您可能必须执行“以脚本执行”或以sqlplus运行才能使其正常工作。

VARIABLE v_WK VARCHAR2(20)
exec :v_WK :='Wk 6'

Select * from myTable Where Column_name = :v_Wk;

关于您的代码块,我们不像在TSQL中那样在Oracle中使用TABLE变量。此外,您不能在PL / SQL范围内运行上述select语句和块(即在BEGIN..END内)。如果你告诉我们你最终想要完成什么会更好,那么就可以提供有效的解决方案。

编辑:您不需要plsql来获取输出。使用这样的简单连接查询。

SELECT a.acct_id,
       b.week_name,
       COUNT(*)
FROM   fact a
       JOIN date_dim b
         ON a.week_name BETWEEN b.week_begin AND b.week_end
GROUP  BY a.acct_id,
          b.week_name;