1

私はこれに数日間取り組んできましたが、エラーがどこにあるのかわかりません。クエリは次のとおりです。

Select distinct p.PkgID, p.PkgName, p.PkgCost, c.CustFName || ' ' || c.CustLName as   "CUSTOMERNAME" 
FROM Subscription s, Package p, Customer c
WHERE p.PkgID = s.PkgID
AND c.CustID = s.CustID     
AND to_date 
 (s.StartDate, 'Mon DD, YYYY')=
to_date 
 (&StartDate, 'Mon DD, YYYY')
ORDER BY p.PkgID;

私は得続けます:

SQL エラー: ORA-00907: 右括弧 00907 がありません。00000 - "右括弧がありません"。

問題が見つかりません。どんな助けでも大歓迎です。テーブルと挿入ステートメントは次のようになります。

CREATE TABLE SUBSCRIPTION
(
SubID NUMBER(5) NOT NULL CONSTRAINT SUBSCRIPTION_SubID_PK PRIMARY KEY,
StartDate DATE NOT NULL,
EndDate DATE NOT NULL,
CustID NUMBER(5) NOT NULL,   
PkgID NUMBER(5) NOT NULL  
 );

ALTER TABLE SUBSCRIPTION ADD CONSTRAINT SUBSCRIPTION_CustID_FK FOREIGN KEY (CustID)     REFERENCES CUSTOMER (CustID);
ALTER TABLE SUBSCRIPTION ADD CONSTRAINT SUBSCRIPTION_PkgID_FK FOREIGN KEY (PkgID) REFERENCES PACKAGE (PkgID);

INSERT INTO SUBSCRIPTION
VALUES (010, to_date('Jan 01, 2010 11:30','Mon DD, YYYY hh24:mi'), to_date('Jan 01,   2013 14:30','Mon DD, YYYY hh24:mi'), 00001, 10101);
INSERT INTO SUBSCRIPTION
VALUES (015,to_date('Mar 01, 2012 17:00','Mon DD, YYYY hh24:mi'), to_date('Dec 05, 2012 17:00','Mon DD, YYYY hh24:mi'), 00002, 20202);

補足として、私はこの方法でも試しました:

Select distinct p.PkgID, p.PkgName, p.PkgCost, c.CustFName || ' ' || c.CustLName as   "CUSTOMERNAME" 
FROM Subscription s
        Left OUTER JOIN Package p on p.PkgID = s.PkgID
    Left OUTER JOIN Customer c on c.CustID = s.CustID       
WHERE to_date (s.StartDate, 'Mon DD, YYYY')=
to_date (&StartDate, 'Mon DD, YYYY')    
ORDER BY p.PkgID;
4

1 に答える 1

5

への入力TO_DATE()は 2 つの文字列です。SQL*Plus 置換変数を使用している場合でも、これを強制する必要があります。

変化する

AND to_date(s.StartDate, 'Mon DD, YYYY') = to_date(&StartDate, 'Mon DD, YYYY')

AND to_date(s.StartDate, 'Mon DD, YYYY') = to_date('&StartDate', 'Mon DD, YYYY')

本当にs.StartDateこの形式の文字ですか? すでに日付になっているように思えますが (希望します)、その場合は必要ありませんが、日付で使用して時刻部分を削除するTO_DATE()価値があるかもしれません。TRUNC()


コメントに基づいて私の回答を編集するには、これを正しい方法で変更したとは思いません。そのはず:

AND trunc(s.StartDate) = to_date('&StartDate', 'Mon DD, YYYY')

TRUNC()とその'周りに注意してください'&StartDate'

于 2013-08-21T17:38:50.773 に答える