SQL と oracle でいくつかの質問をしようとしていますが、機能しておらず、目的の結果が返されません。誰かが私が間違っていることを教えてもらえますか?
質問は:-
請求書の期限が 30 日を超えている顧客を識別して非アクティブとマークするクエリを作成します (これは通常、サブクエリを使用して実行できます)。システムから実際に顧客レコードを削除するのではなく、顧客を非アクティブとしてマークするだけであることを忘れないでください。
これは私が試したクエリです:-
SELECT CUSTID, CUSTFIRSTNAME, CUSTSTATUS FROM CUSTOMER;
UPDATE CUSTOMER
SET CUSTSTATUS='I'
WHERE CUSTID IN
(SELECT CUSTID FROM BILLING
WHERE (SYSDATE - DUEDATE) > 30 AND PAIDDATE IS NULL);
SELECT CUSTID, CUSTFIRSTNAME, CUSTSTATUS FROM CUSTOMER;
課金テーブルの値は次のとおりです:-
--INSERT STATEMENTS FOR TABLE BILLING
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(1, 1, 30, DATE '2012-07-01', 30, DATE '2012-07-01' );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(2, 2, 80, DATE '2012-06-25', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(3, 3, 50, DATE '2012-04-01', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(4, 4, 30, DATE '2012-06-11', 30, DATE '2012-06-11' );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(5, 5, 50, DATE '2012-04-30', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(6, 6, 80, DATE '2012-06-01', 80, DATE '2012-05-30' );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(7, 7, 30, DATE '2012-06-15', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(8, 8, 30, DATE '2012-05-30', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(9, 9, 80, DATE '2012-05-25', 0, );
INSERT INTO BILLING(CUSTID,BILLID,BILLAMT,DUEDATE,PAIDAMT,PAIDDATE )
VALUES(10, 10, 50, DATE '2012-04-01', 0, );
これらはBILLINGおよびCustomerテーブルの構造です:-
SQL> desc customer;
Name Null? Type
------------------------------------------------------------------------ -------- -----------------
CUSTID NOT NULL NUMBER(5)
CUSTSTATUS NOT NULL CHAR(1)
CUSTDELETERZN VARCHAR2(100)
CUSTDELETEDATE DATE
EMPID NOT NULL NUMBER(5)
CUSTFIRSTNAME NOT NULL VARCHAR2(30)
CUSTLASTNAME NOT NULL VARCHAR2(20)
CUSTSTARTDATE DATE
PACKID NOT NULL NUMBER(2)
CUSTPHONE VARCHAR2(12)
CUSTSTREET VARCHAR2(30)
CUSTCITY VARCHAR2(20)
CUSTSTATE CHAR(2)
CUSTZIP NUMBER(5)
CUSTEMAIL VARCHAR2(30)
SQL> desc billing;
Name Null? Type
------------------------------------------------------------------------ -------- -----------------
CUSTID NOT NULL NUMBER(5)
BILLID NOT NULL NUMBER(5)
BILLAMT NOT NULL NUMBER(5)
DUEDATE NOT NULL DATE
PAIDAMT NUMBER(5)
PAIDDATE DATE
私も書いてみました" WHERE (SYSDATE - DUEDATE) > 30 AND PAIDDATE ='');"
これもうまくいきませんでした。
編集:-
INSERT ステートメントに NULL を挿入しましたが、このエラーが発生しています:-
UPDATE CUSTOMER * 1 行目のエラー: ORA-02290: チェック制約 (D03318785.CC_CUSTOMER_F_CUSTSTATUS) 違反
誰でも助けてくれますか?
顧客テーブルの作成は次のとおりです:-
CREATE TABLE CUSTOMER(
custid NUMBER(5) NOT NULL
CONSTRAINT pk_custid PRIMARY KEY,
custstatus CHAR(1) NOT NULL,
custdeleterzn VARCHAR2(100),
custdeletedate DATE,
empid NUMBER(5) NOT NULL,
custfirstname VARCHAR2(30) NOT NULL,
custlastname VARCHAR2(20) NOT NULL,
custstartdate DATE,
packid NUMBER(2) NOT NULL,
custphone VARCHAR2(12),
custstreet VARCHAR2(30),
custcity VARCHAR2(20),
custstate CHAR(2),
custzip NUMBER(5),
custemail VARCHAR2(30));