Sql 如何修复';ORA-00904:;“是的:无效标识符00904。00000-“百分比”s:无效标识符“';?

Sql 如何修复';ORA-00904:;“是的:无效标识符00904。00000-“百分比”s:无效标识符“';?,sql,oracle,case,Sql,Oracle,Case,我试图创建一个SQL select语句,该语句使用变量输入来确定WHERE函数的操作方式。代码遇到了意想不到的问题 我曾尝试更改条件的语法,以便它们改用LIKE,但问题仍然存在。该变量肯定已保存,但仍会出现错误 SELECT (SELECT description FROM froomtype rt WHERE rt.roomtypeid = rsd.roomtypeid), SUM(totalrevenue) FROM froomservicedata rsd W

我试图创建一个SQL select语句,该语句使用变量输入来确定WHERE函数的操作方式。代码遇到了意想不到的问题

我曾尝试更改条件的语法,以便它们改用LIKE,但问题仍然存在。该变量肯定已保存,但仍会出现错误

SELECT (SELECT description FROM froomtype rt 
       WHERE rt.roomtypeid = rsd.roomtypeid),
       SUM(totalrevenue)
FROM froomservicedata rsd
WHERE (SELECT requestdate FROM froomservice rs WHERE rs.roomserviceid = rsd.roomserviceid) >
    (CASE
         WHEN UPPER(&&timeperiod) = 'D' THEN 
             sysdate - interval '24' hour  
         WHEN UPPER(&&timeperiod) = 'W' THEN 
             sysdate - interval '7' day  
         WHEN UPPER(&&timeperiod) = 'M' THEN 
             sysdate - interval '1' month   
         WHEN UPPER(&&timeperiod) = 'Y' THEN 
             sysdate - interval '1' year
         ELSE
            sysdate + 1
    END)
GROUP BY (SELECT description FROM froomtype rt WHERE rt.roomtypeid = rsd.roomtypeid);
以下是错误消息:

ORA-00904: "Y": invalid identifier
00904. 00000 -  "%s: invalid identifier"

您缺少单引号

您的查询应该是:

SELECT (SELECT description FROM froomtype rt 
       WHERE rt.roomtypeid = rsd.roomtypeid),
       SUM(totalrevenue)
FROM froomservicedata rsd
WHERE (SELECT requestdate FROM froomservice rs WHERE rs.roomserviceid = rsd.roomserviceid) >
    (CASE
         WHEN UPPER('&&timeperiod') = 'D' THEN 
             sysdate - interval '24' hour  
         WHEN UPPER('&&timeperiod') = 'W' THEN 
             sysdate - interval '7' day  
         WHEN UPPER('&&timeperiod') = 'M' THEN 
             sysdate - interval '1' month   
         WHEN UPPER('&&timeperiod') = 'Y' THEN 
             sysdate - interval '1' year
         ELSE
            sysdate + 1
    END)
GROUP BY (SELECT description FROM froomtype rt WHERE rt.roomtypeid = rsd.roomtypeid);

干杯

&&timeperiod
不是一个有效的Oracle标识符AFAIK。@TimBiegeleisen您可以在sql Developer中使用它,它将被您之前定义的值替换:)确实,如果要在存储过程中使用它,它不是正确的语法传递参数的尝试?@jarlh Yes,在Oracle SQL Developer中,您可以通过&(每次询问)或&(询问一次并始终使用它)(不相关)提示将变量传递给查询<代码>大小写上限(&&timeperiod)当“D”时,然后。。。当“W”然后。。。结束保存一些键入内容。