我正在尝试比较特定日期(在这种情况下是结算日期)并将其与当前日期(SYSDATE)进行比较。任何实际结算日期超过当前日期14天的实体都会将其帐户状态标记为非活动状态。这是代码:
UPDATE CUSTOMERS;
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
( SELECT CUST_ID
FROM BILLING
WHERE BILLING_DATE IN
(SELECT TRUNC(SYSDATE) - TRUNC(BILLING_DATE) DAYS FROM BILLING)
> 14)
COMMIT;
它不会运行,我不太确定错误在哪里。我正在使用Oracle 11g Express,并通过浏览器,而不是命令行,所以我无法弄清楚哪个确切的行是错误的。任何建议都将不胜感激,谢谢!
编辑:更多信息。 客户表
CREATE TABLE CUSTOMERS (
CUST_ID NUMBER(5),
FIRST_NAME CHAR(30),
LAST_NAME CHAR(35),
ADDRESS CHAR(100),
POSTAL_CODE CHAR(8),
EMAIL_ADDRESS VARCHAR2(100),
DATE_REGISTERED DATE,
DATE_DISCONNECTED DATE,
REASON_DISC VARCHAR2(250),
EMPLOYEE_ID NUMBER(5),
SURVEY_ID NUMBER(5),
ACCOUNT_STATUS CHAR(20),
PRIMARY KEY (CUST_ID),
FOREIGN KEY (SURVEY_ID) REFERENCES SURVEY,
FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEES
);
样本条目
INSERT INTO CUSTOMERS VALUES (1,'Alan','Abdelkarim','4712 Victorian ',' H3W 2N1','Alan.Abdelkarim@hotmail.com',(to_date('02/01/2012','mm/dd/yyyy')),NULL,NULL,NULL,NULL,'Active');
结算表
CREATE TABLE BILLING (
TRANSACTION_ID NUMBER(5),
PACKAGE_ID NUMBER(5),
CUST_ID NUMBER(5),
BILLING_DUE DATE,
TRANS_TIME CHAR(5),
TRANS_DATE Date,
PRIMARY KEY (TRANSACTION_ID),
FOREIGN KEY (PACKAGE_ID) REFERENCES PACKAGES,
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMERS
);
示例条目
INSERT INTO BILLING VALUES (1,4,1,(to_date('11/15/2013','mm/dd/yyyy')),'8:00',(to_date('11/28/2013','mm/dd/yyyy')));
答案 0 :(得分:3)
试试这个:
UPDATE CUSTOMERS
SET ACCOUNT_STATUS = 'Inactive'
WHERE CUST_ID IN
(SELECT CUST_ID
FROM BILLING
WHERE (TRUNC(SYSDATE) - TRUNC(BILLING_DATE)) > 14
)
;
COMMIT;