简体   繁体   中英

Invalid datatype when adding constraint in Oracle

I want to create this table in Oracle. This is only the table SQL script.

     -- CREATE TABLES SECTION -------------------------------------------------

-- TABLE DATACENTER

CREATE TABLE DATACENTER(
  DATACENTERID INTEGER NOT NULL,
  NAME VARCHAR2(80 ) NOT NULL,
  LOCATION VARCHAR2(200 ),
  DCALLOWEDWEIGHTKG NUMBER(9,0),
  DCMAXIMUMWEIGHTKG NUMBER(9,0),
  DCALLOWEDPOWERWATT NUMBER(9,0),
  DCMAXPOWERWATT NUMBER(9,0),
  DCALLOWCOOLINGPOWERBTU NUMBER(9,0),
  DCMAXCOOLINGPOWERBTU NUMBER(9,0),
  DESCRIPTION CLOB
)
/
-- ADD KEYS FOR TABLE DATACENTER

ALTER TABLE DATACENTER ADD CONSTRAINT DATACENTERID PRIMARY KEY (DATACENTERID)
/

-- TABLE COMPONENT

CREATE TABLE COMPONENT(
  COMPONENTID INTEGER NOT NULL,
  DATACENTERID INTEGER,
  FKCOMPONENTID INTEGER,
  COMPONENTSTATSID INTEGER NOT NULL
)
/

-- ADD KEYS FOR TABLE COMPONENT

ALTER TABLE COMPONENT ADD CONSTRAINT COMPONENTID PRIMARY KEY (COMPONENTID)
/
-- CREATE RELATIONSHIPS SECTION ------------------------------------------------- 

ALTER TABLE COMPONENT ADD CONSTRAINT IS PART OF A FOREIGN KEY (DATACENTERID) REFERENCES DATACENTER (DATACENTERID)
/

ALTER TABLE COMPONENT ADD CONSTRAINT IS A SUBPART OF FOREIGN KEY (FKCOMPONENTID) REFERENCES COMPONENT (COMPONENTID)
/

The error stack:

table DATACENTER created.
table DATACENTER altered.
table COMPONENT created.
table COMPONENT altered.

Error starting at line 39 in command:
ALTER TABLE COMPONENT ADD CONSTRAINT IS PART OF A FOREIGN KEY (DATACENTERID) REFERENCES DATACENTER (DATACENTERID)
Error report:
SQL Error: ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"
*Cause:    
*Action:

Error starting at line 42 in command:
ALTER TABLE COMPONENT ADD CONSTRAINT IS A SUBPART OF FOREIGN KEY (FKCOMPONENTID) REFERENCES COMPONENT (COMPONENTID)
Error report:
SQL Error: ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"
*Cause:    
*Action:

EDIT I edited the code because I saw that some SQL statements are missing. I can provide the schema if you want?

Best wishes

Your constraint name IS PART OF A is an illegal identifier (because of the spaces).

You need to remove the spaces, eg IS_PART_OF_A :

ALTER TABLE COMPONENT 
   ADD CONSTRAINT IS_PART_OF_A 
   FOREIGN KEY (DATACENTERID) 
   REFERENCES DATACENTER (DATACENTERID)

Edit
I also realized that your script is not correctly terminating the individual statements. There is a ; (or / ) missing after the first CREATE TABLE. And the first ALTER TABLE is not properly terminated as well. I don't know if that is a copy & paste error though.

Edit2 :

Here is the complete script with correct names, statement termination and in the correct order:

CREATE TABLE COMPONENT(
    COMPONENTID INTEGER NOT NULL,
    DATACENTERID INTEGER,
    FKCOMPONENTID INTEGER,
    COMPONENTSTATSID INTEGER NOT NULL
)
/

CREATE TABLE DATACENTER(
  DATACENTERID INTEGER NOT NULL,
  NAME VARCHAR2(80 ) NOT NULL,
  LOCATION VARCHAR2(200 ),
  DCALLOWEDWEIGHTKG NUMBER(9,0),
  DCMAXIMUMWEIGHTKG NUMBER(9,0),
  DCALLOWEDPOWERWATT NUMBER(9,0),
  DCMAXPOWERWATT NUMBER(9,0),
  DCALLOWCOOLINGPOWERBTU NUMBER(9,0),
  DCMAXCOOLINGPOWERBTU NUMBER(9,0),
  DESCRIPTION CLOB
)
/

ALTER TABLE DATACENTER ADD CONSTRAINT DATACENTERID PRIMARY KEY (DATACENTERID)
/

ALTER TABLE COMPONENT ADD CONSTRAINT COMPONENTID PRIMARY KEY (COMPONENTID)
/

ALTER TABLE COMPONENT ADD CONSTRAINT IS_PART_OF_A FOREIGN KEY (DATACENTERID) REFERENCES DATACENTER (DATACENTERID)
/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM