带有动态 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_N
是 DATE
(数据类型),您可以
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))
我想在 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_N
是 DATE
(数据类型),您可以
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))