带有动态 when 子句的 ORACLE 11GPL/SQL 游标

ORACLE 11GPL/SQL cursor with dynamic when clause

我想在 PL/SQL 过程中使用以下游标(运行 在 Oracle 11g 上):

SELECT
        dateagregation as DATEAGREG,
        SUM(TRAITE3MOIS) as col1,
        SUM(TRAITE)      as col2
        FROM ttabdbordrescrit where dateagregation = P_AGREGATION_N
        AND directionid = P_DIRECTIONID
        AND celluleid = P_CELLULEID
        AND libelletabdbordrescritid IN (CASE
                        WHEN (YEAR(P_AGREGATION_N) >= 2020)
                        THEN
                          2, 26, 27
                        ELSE 
                           2
                     END)

但我在 SQLDEVELOPPER 上遇到 ORA 00905 错误,第 2、26、27 行为红色! (P_AGREGATION_N 是一个 PL_SQL 有效参数) 怎么了?

是否有另一种构建动态查询的方法?

提前感谢您的回答。

不是参数,而是这个:

WHEN (YEAR(P_AGREGATION_N) >= 2020)

Oracle 中没有 YEAR 函数。如果 P_AGREGATION_NDATE(数据类型),您可以

when extract(year from p_agregation_n) >= 2020

如果是字符串,使用SUBSTR函数。

没有 year 函数,除非您创建了一个函数,并且您不能 return 像 case 语句那样的列表。假设 p_agregation_n 是一个 date 参数,您需要类似

AND (   (    p_agregation_n >= date '2020-01-01'
         and libelletabdbordrescritid in (2, 26, 27))
     or (    p_agregation_n <  date '2020-01-01' 
         and libelletabdbordrescritid = 2))