2016-05-15 17 views
0
CREATE TABLE CUSTOMER 
(
    CNUM VARCHAR(25) NOT NULL, 
    CNAME VARCHAR(75) NOT NULL, 
    CTYPE VARCHAR(20) NOT NULL, 

    CONSTRAINT CUSTOMER_PK PRIMARY KEY(CNUM), 
    CONSTRAINT CHECK_CTYPE CHECK(CTYPE IN('INDIVIDUAL', 'INSTITUTION')) 
); 

CREATE TABLE CREDIT_TERM 
(
    CREDITSTATUS VARCHAR(20) NOT NULL, 
    STARTDATE DATE NOT NULL, 
    ENDDATE DATE NOT NULL, 

    CONSTRAINT CREDIT_TERM_PK PRIMARY KEY(CREDITSTATUS) 
); 


insert into CREDIT_TERM values('ONE-MONTH','15-05-2015','15-06-2015'); 
insert into CREDIT_TERM values('TWO-MONTH','15-05-2015','15-06-2015'); 
insert into CREDIT_TERM values('THREE-MONTH','15-05-2015','15-06-2015'); 

ALTER TABLE CUSTOMER 
ADD CONSTRAINT CUSTOMER_FK_CREDITSTATUS 
    FOREIGN KEY(CREDITSTATUS) REFERENCES CREDIT_TERM(CREDITSTATUS); 

Ich versuche, einen Fremdschlüssel hinzufügen, aber ich verstehe nicht, warum ich diesen Fehler:Kann nicht Fremdschlüssel zu Tabelle hinzufügen

ERROR at last line :
ORA-00904: "CREDITSTATUS": invalid identifier

+5

Ihre Tabelle 'customer' hat keine Spalte 'creditstatus'. Was genau versuchst du zu tun? – Mureinik

+0

Wie füge ich die Kreditstatusspalte hinzu addiere es auf credit_term – user6235245

Antwort

0

Sie versuchen, hinzufügen eine Fremdschlüsseleinschränkung für einen Fremdschlüssel namens CREDITSTATUS auf der CUSTOMER-Tabelle. Die Tabelle CUSTOMER verfügt jedoch nicht über einen Fremdschlüssel für CREDITSTATUS.

Sie müssen einen Fremdschlüssel in CUSTOMER für CREDITSTATUS erstellen und dann die letzte Zeile erneut ausführen, um die Abhängigkeit hinzuzufügen.

ALTER TABLE CUSTOMER ADD CREDITSTATUS VARCHAR(20); 

Docs:

EDIT

Verwenden ALTER TABLE die Spalte zu CUSTOMER hinzufügen http://www.techonthenet.com/oracle/tables/alter_table.php

+0

Wie mache ich das? – user6235245

+0

Okay, wenn ich sagen möchte, dass ich einen Wert für den Kreditstatus für die Datensätze in der Kundentabelle hinzufügen möchte, wie würde ich es tun? – user6235245

+0

@ user6235245 - mit einer UPDATE-Anweisung – APC

0

Wie ich in den Kommentaren erwähnt, Ihre customer Tabelle nicht ein creditstatus Spalte. Sie müssten es zuerst hinzufügen:

Und dann machen Sie es zu einem Fremdschlüssel, mit der Aussage, die Sie bereits haben.

alter table customer add (
    creditstatus varchar2(20) constraint customer_fk_creditstatus references credit_term 
    ); 

Ein paar Anmerkungen:

+0

Okay, wenn ich sagen möchte, ich möchte einen Wert für den Kreditstatus für die Datensätze in Kundentabelle hinzufügen, wie würde ich es tun? – user6235245

0

Sie können die Spalte und die Fremdschlüssel in einer Erklärung hinzu. Zuerst habe ich die Spaltendefinition in Klammern eingeschlossen. Es kann ohne sie funktionieren, aber die offizielle Syntax scheint sie zu erfordern. http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103924

Zweitens dürfen Sie in einer Inline-Integritätsregel (definiert auf Spaltenebene, nicht auf Tabellenebene) die Wörter FOREIGN KEY nicht verwenden. Das Wort REFERENCES identifiziert bereits den Einschränkungstyp. Drittens, wenn Sie den PRIMARY KEY der referenzierten Tabelle referenzieren, müssen Sie (wenn Sie möchten) die referenzierte Spalte in der referenzierten Tabelle benennen. Wenn Sie die Spalte nicht benennen, wird standardmäßig der PRIMARY KEY der referenzierten Tabelle verwendet - was in den allermeisten Fällen sowieso gewünscht ist.

Verwandte Themen