Sql 在where子句中为循环使用游标变量

Sql 在where子句中为循环使用游标变量,sql,oracle,for-loop,cursor,Sql,Oracle,For Loop,Cursor,我在Oracle上执行SQL时发现了一些奇怪的东西。 我有一个FOR循环,它迭代存储为VARCHAR2的日期列表: FOR current_date in (SELECT DISTINCT DATCRE as datcre FROM EVE cdv WHERE cdv.datcre BETWEEN p_datedeb AND p_datefin) LOOP [queries] END LOOP; 我需要

我在Oracle上执行SQL时发现了一些奇怪的东西。 我有一个FOR循环,它迭代存储为VARCHAR2的日期列表:

FOR current_date in (SELECT DISTINCT DATCRE as datcre
                     FROM EVE cdv
                     WHERE cdv.datcre BETWEEN p_datedeb AND p_datefin)
LOOP
    [queries]
END LOOP;
我需要在以下查询的where子句中使用当前_日期:

SELECT COUNT(cdv.numeve)
INTO nb
FROM EVE cdv
WHERE cdv.datcre = current_date.datcre;
这个查询不起作用,我得到一个ORA-00933:SQL命令没有正确结束。 现在,如果我声明一个curDate VARCHAR210变量,在其中存储current_date.datcre并在查询中使用它,它就可以正常工作了:

curDate := (current_date.datcre);

SELECT COUNT(cdv.numeve)
INTO nb
FROM EVE cdv
WHERE cdv.datcre = curDate;

我是否遗漏了什么,或者这只是Oracle的工作方式?

除了比较两个字符串而不是实际日期之外,我看不出有任何问题。因为当前日期是一个内置函数,对于隐式记录来说,这似乎是一个糟糕的选择。不确定是什么原因导致了问题,但在某个时候可能会导致问题。LalitKumarB,数据库不是我创建的,日期总是以字符串形式存储。因为我处理了很多记录,我想如果我过去约会会更糟。JustinCave,我将尝试使用不同的名称和更新。@JustinCave,结果证明您是对的,因为在运行查询时它是一个内置函数Oracle将current_date作为内置函数,而不是FOR变量,因此current_date。[某些东西]没有意义。改了名字,现在一切都很好。谢谢