当where子句中存在变量时,Oracle SQL失败

当where子句中存在变量时,Oracle SQL失败,sql,oracle,plsql,Sql,Oracle,Plsql,我刚从SQL Server切换到Oracle,当我使用的变量的值不是基于SQL查询的结果设置的时,我对如何获取结果感到困惑。这到底是怎么回事 variable firstDate date; variable secondDate date; exec firstDate := '03/01/2019'; exec secondDate := '03/31/2019'; select c.xent_id FROM lic c WHERE C.EXPR_DTE &

我刚从SQL Server切换到Oracle,当我使用的变量的值不是基于SQL查询的结果设置的时,我对如何获取结果感到困惑。这到底是怎么回事

variable firstDate date; 
variable secondDate date;
exec firstDate := '03/01/2019';
exec secondDate := '03/31/2019';

select 
   c.xent_id  
FROM 
   lic c 
WHERE 
   C.EXPR_DTE >= TO_DATE(firstDate,'MM/DD/YYYY') 
   AND C.EXPR_DTE <= TO_DATE(secondDate,'MM/DD/YYYY') 
   AND c.clnt_cde = 8801
变量firstDate;
可变第二日期;
执行官首次日期:=“2019年1月3日”;
执行官第二个日期:=“2019年3月31日”;
选择
c、 xent_id
从…起
字母c
哪里
C.EXPR\u DTE>=截止日期(第一个日期,'MM/DD/YYYY')

和C.EXPR_DTE不能在SQL*Plus/SQL developer中定义
DATE
bind变量。它可以定义为
VARCHAR2
,并分配一个字符串,并在需要时进行转换。另外,请注意,在绑定变量之前的适当位置缺少冒号。检查查询以查看如何使用它。您可以在实际查询的where子句中放置相同的表达式

variable firstDate VARCHAR2; 
variable secondDate VARCHAR2;
exec :firstDate := '03/01/2019';
exec :secondDate := '03/31/2019';


select TO_DATE(:firstDate,'MM/DD/YYYY') dt1 , TO_DATE(:secondDate,'MM/DD/YYYY')
 as dt2 from dual;

DT1      DT2     
-------- --------
01-03-19 31-03-19

我需要在下面的语句中使用这些变量:从licc中选择c.xent\u id,其中c.EXPR\u DTE>=to\u DATE(firstDate,'MM/DD/yyyyy')和c.EXPR\u DTE@Clos:继续使用它,什么阻止了你?当我尝试使用它时,我会得到一个错误报告:error report-ORA-06550:第2行,第5列:PLS-00428:此SELECT语句ORA-06550:第5行,第76列:PL/SQL:ORA-00904:“DT2”:无效标识符ORA-06550:第5行,第5列:PL/SQL:SQL语句忽略06550。00000-“行%s,列%s:\n%s”*原因:通常是PL/SQL编译错误。@Clos:您没有告诉我们您正在过程/PL/SQL块中使用该SQL语句。我在SQL上下文中回答了这个问题,如果您想在PL/SQL范围中使用相同的变量,您需要一个变量来保存所选列,例如,
xent\u id
,就像我上面提到的那样……我对Oracle非常陌生,我一直在阅读,但没有找到我需要的内容。我可以声明变量,但不能在where语句中使用它们。如果你看我贴的最上面的地方,那就是我需要做的,我只是不知道如何正确地做。我无法生成存储过程或函数(说来话长),我需要能够执行脚本并获得结果。