2016-04-10 25 views
0

私はデータベースとOracleには比較的新しいので、2つのテーブルを含むプロジェクト用にデータベースを作成しようとしています。 Klant(顧客)とAccount_これらの2つは互いに外部キーとしてPKを持っています。これは私がこの(Oracle)テーブルの作成後に制約を追加する

DROP TABLE KLANT CASCADE CONSTRAINTS; 
DROP TABLE ACCOUNT_ CASCADE CONSTRAINTS; 

CREATE TABLE KLANT 
(
    "KlandId" INT PRIMARY KEY, 
    "AccountId" INT, 
    "Voornaam" VARCHAR2(64)NOT NULL, 
    "Achternaam" VARCHAR2(64) NOT NULL, 
    "GENDER" CHAR(1) DEFAULT 'M' CHECK (UPPER(GENDER) in ('M','F')), 
    "Tussenvoegsels" VARCHAR2(16), 
    "EmailAdres" VARCHAR2(64), 
    "Land" VARCHAR2(64) DEFAULT 'Nederland', 
    "Stad" VARCHAR2(64), 
    "Adres" VARCHAR2(64), 
    "Toevoeging" CHAR(1)); 

CREATE TABLE Account_ 
(
    "AccountId" INT PRIMARY KEY, 
    "KlantId_" INT, 
    "GebruikersNaam" VARCHAR2(64)UNIQUE NOT NULL, 
    "Wachtwoord" VARCHAR2(64) 
); 

ALTER TABLE KLANT 
ADD CONSTRAINT fk_accountId FOREIGN KEY (AccountId) REFERENCES "Account_"(AccountId); 

ALTER TABLE Account_ 
ADD CONSTRAINT fk_klantId FOREIGN KEY (KlantId_) REFERENCES "Klant"(KlantId); 

これで、その結果、テーブルの作成後に外部キーを作成しなければならなかった場合であるので、私に次のエラーが生じた:すべてのオランダ語の単語を

Error starting at line : 39 in command - 
ALTER TABLE KLANT 
ADD CONSTRAINT fk_accountId FOREIGN KEY (AccountId) REFERENCES "Account_"(AccountId) 
Error report - 
SQL Error: ORA-00904: "ACCOUNTID": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 

は申し訳ありません。 (

私の質問のビーイング:。。それはおそらくri​​duculously愚かなものですので、私の混乱をアップしました

+0

申し訳ありません、完全に編集する前に投稿しました。 –

答えて

0

見積たAccountId Oracleオブジェクトでは、一般的に大文字ですWHE。 n AccountIdを引用符なしで使用すると、OracleはACCOUNTIDを探します。

+0

REFERENCESの括弧でAccountIdを意味すると仮定しても、同じエラーが返されます。 –

+0

Hmmm。私は少し不思議です(そしてこれはあなたの質問とは関係ありません)なぜこれらのテーブルで循環的な外部キー参照があるのでしょうか。いずれにせよ、REFERENCES "Account _"( "AccountId")を使用しているのが失敗していると言っていますか?編集 - あなたはまた、外部キー(AccountId)コンポーネントでそれを行う必要があります。 FOREIGN KEY( "AccountId")を参照する必要があります。 –

+0

これは私が現在行っている制約です。 ALTER TABLE KLANT ADD CONSTRAINT fk_accountId FOREIGN KEY( "AccountId")REFERENCES "Account _"( "AccountId"); これで、テーブルまたはビューが単に存在しないという通知が表示されるようになりました。私はAccount_表が作成されているという確認を得たので、これは奇妙です。 –

0
 ALTER TABLE KLANT 
ADD CONSTRAINT fk_accountId FOREIGN KEY ("AccountId") REFERENCES Account_("AccountId"); 

Account_表の名前は二重引用符で囲まないでください。他のテーブルと同じです。

+0

これは、私の作成クエリーで引用符を削除する場所がある場合にも機能します。 AccountIdの両方のインスタンスをコードの間に置くことで、私は同じ結果になりました。 –

+0

私は自分の答えを編集しました。それが正しい方法で試してみて、それが動作すれば教えてください。 AccountIdは引用符で囲まれたほうがよいが、テーブル名(Account_)は引用符で囲むことはできません。 – Iman

関連する問題