1
SQL> create table Drugs (
  2  DrugNumber smallint primary key,
  3  DrugMarketName varchar(40),
  4  DrugGenericName varchar(40),
  5  PackSize smallint,
  6  UnitCost numeric(7,2),
  7  foreign key (DrugSupplierNumber) references Drug_Suppliers (DrugSupplierNumber) );
foreign key (DrugSupplierNumber) references Drug_Suppliers (DrugSupplierNumber)
)
             *
ERROR at line 7:
ORA-00904: "DRUGSUPPLIERNUMBER": invalid identifier
4

2 回答 2

3

Oracle 抱怨(正确地)您的表定义中没有 DrugSupplierNumber 列。要么去掉“外键”,要么创建一个普通列 DrugSupplierNumber 并在之后添加约束;v1 的示例:

create table Drugs (
  DrugNumber smallint primary key,
  DrugMarketName varchar(40),
  DrugGenericName varchar(40),
  PackSize smallint,
  UnitCost numeric(7,2),
  DrugSupplierNumber references Drug_Suppliers (DrugSupplierNumber) 
);
于 2012-07-06T18:48:57.997 回答
2

您正在尝试创建一个涉及DrugSupplierNumber不属于表的列的外键约束。您不想在此表上创建外键,或者您想向DrugSupplierNumber此表添加一列,或者您想在约束中引用此表中的其他列之一。我的猜测是您只是忘记将DrugSupplierNumber列添加到表定义中。

尽管它在语法上是有效的,但在 Oracle 表中声明列的可能性很小smallint。这是 a 的别名,NUMBER(38)因此它不会提供任何(合理的)上限,就像您来自非 Oracle 数据库时所期望的那样。

SQL> create table foo( col1 smallint );

Table created.

SQL> desc foo
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER(38)

此外,在 Oracle 中,将字符串列声明为VARCHAR2而不是VARCHARUnitCost列声明为NUMBER(7,2)而不是NUMERIC(7,2).

于 2012-07-06T18:52:13.983 回答