【问题标题】:Writing CASE statement Error ORA-00923编写 CASE 语句错误 ORA-00923
【发布时间】:2010-12-09 14:12:16
【问题描述】:

我有一个使用 CREATE 和 INSERT INTO 语句填充的数据库。我现在正在尝试编写一个 CASE statemenet,它将显示其 payment_due_date 已超过今天日期的“客户”。下面是下面的代码

CREATE STATEMENT 'Ord'(订单)

CREATE TABLE Ord(OrderID varchar2(9) PRIMARY KEY, 
CustomerID varchar(9) REFERENCES Customer(CustomerID), 
Expected_Delivery_Date date DEFAULT sysdate NOT NULL, 
Actual_Delivery_Date date DEFAULT sysdate NOT NULL, 
Payment_Due_Date date DEFAULT sysdate NOT NULL,
 Order_Date date DEFAULT sysdate NOT NULL, Price Varchar(10), 
Order_Placed varchar2(1) CONSTRAINT OrderPlaced 
CHECK(Order_Placed IN('Y','N')) NOT NULL, Order_Confirmed varchar2(1)
CONSTRAINT Order_Confirmed CHECK(Order_Confirmed IN('Y','N')) 
NOT NULL, Order_Completed varchar2(1) CONSTRAINT Order_Completed
CHECK(Order_Completed IN('Y','N')) NOT NULL) 

插入声明

 INSERT INTO Ord VALUES(401565981, 501623129, 
    '10-Dec-10', '11-Dec-10', '07-Dec-10', '03-Dec-10','£14.99', 'Y', 'Y', 'Y')

案例陈述

 SELECT OrderID, CustomerID, Payment_Due_Date CASE WHEN 
Payment_Due_Date = '08-Dec-10' THEN 'Send Final Demand Letter'
    ELSE 'Do not send letter' 
    END FROM Ord;

当我尝试运行上述案例语句时,我收到以下错误

ORA-00923: 未找到 FROM 关键字 预期的地方 00923. 00000 - “在预期的地方找不到 FROM 关键字” *原因:
*操作:行错误:26 列:50

有没有办法解决这个问题?

【问题讨论】:

    标签: sql oracle ora-00923


    【解决方案1】:

    我认为 Payment_Due_Date 和 CASE 之间需要一个逗号。

    【讨论】:

    • 叶 (+1)。 CASE 语句的结果只是结果集中的另一列,因此它需要一个逗号。
    • 您可以从代码中看到我正在尝试编写查询,以便如果付款到期日期已超过今天,则查询应输出消息“发送最终需求信”,它非常相似到 'if else statement' Payment_Due_Date =
    • 我想你需要使用 Payment_Due_Date <= '2010-12-08',但我对 Oracle 的细节知之甚少 :)(编辑:哎呀,=)
    • 啊,对不起:我以前没见过 '08-Dec-10' 格式。您的解决方案是正确的。
    • @user532339 啊!请不要依赖字符串到日期的隐式转换。理想情况下使用带有格式字符串to_date('08-DEC-2010', 'DD-MON-YYYY') 的to_date 函数或ANSI 日期文字date '2010-12-08'。隐式转换就是自找麻烦!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多