感谢您的期待...
我花了好几个小时来研究这个问题,而且我不相信在PL / SQL中做一些很难在TSQL中做的事情。
我有一个连接2个表的简单查询:
Select DISTINCT
to_char(TO_DATE('1899123000', 'yymmddhh24')+ seg.NOM_DATE, 'mm/dd/yyyy') AS "Record Date"
, cd.CODE
, EMP.ID
, EMP.SHORT_NAME
FROM
EWFM.GEN_SEG seg join EWFM.SEG_CODE cd ON seg.SEG_CODE_SK = cd.SEG_CODE_SK
join EMP on seg.EMP_SK = EMP.EMP_SK
where NOM_DATE = vMyDate;
我使用Toad Date Point,并且我正在查询Oracle Exadata源。生成的查询将被放入可视化工具,如QlikView或Tableau。我想创建一个简单的变量来使用WHERE子句,如代码所示。
在此示例中,NOM_DATE是一个整数,例如42793(2017年2月27日),您可以在第一行"记录日期"中看到。这里没什么新东西,不是很令人兴奋......直到......我试图创建一个变量来使查询更具动态性。
我尝试了各种各样的例子,但都失败了。如:
declare
myDate number(8);
Begin
myDate := 42793;
- 预计将失败ORA-06550 INTO条款
variable nomDate NUMBER
DEFINE nomDate = 42793
EXEC : nomDate := ' & nomDate'
...where NOM_DATE = ( & nomDate) ;
- ORA-00900:无效的SQL语句
和
variable nomDate NUMBER;
EXEC nomDate := 42793;
select count(DET_SEG_SK) from DET_SEG
where NOM_DATE = :nomDate;
- ORA-00900:无效的SQL语句
还有几个..希望你能得到这个想法。我花了几个小时研究stackoverflow以获得正确的答案,但正如你所看到的,我问你。从简单的声明,如" Var"更复杂的#34; DECLARE,BEGIN,SELECT INTO ...."实际创建函数,使用游标迭代输出....我仍然无法在Where子句中创建一个简单的变量。
请解释我的方式错误。
- Forlorn SQL Dev
答案 0 :(得分:1)
pin
答案 1 :(得分:1)
由于您使用的是隐式游标,因此必须选择INTO变量。现在我不知道你变量的数据类型,所以我在下面的例子中猜到了,但希望你能明白这一点。
我应该提及另外两件事
Declare myDate number(8) := 42793; /* These 4 variable data types are a guess */ v_record_date varchar2(8); v_cd_code varchar2(10); v_emp_id number(4); v_emp_short_name varchar2(100); BEGIN Select DISTINCT to_char(TO_DATE('1899123000', 'yymmddhh24') + eg.NOM_DATE, 'mm/dd/yyyy') AS "Record Date" , cd.CODE , EMP.ID , EMP.SHORT_NAME INTO v_record_date, v_cd_code, v_emp_id, v_emp_short_name FROM EWFM.GEN_SEG seg join EWFM.SEG_CODE cd ON seg.SEG_CODE_SK = cd.SEG_CODE_SK join EMP on seg.EMP_SK = EMP.EMP_SK where NOM_DATE = myDate; END; /
答案 2 :(得分:0)
您将带有getter和setter的变量放在包中。
然后使用包含getter的视图
我个人更喜欢使用一种集合,我可以从表格中选择*(packagage.func(myparam))