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
问问题
62 次
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
而不是VARCHAR
将UnitCost
列声明为NUMBER(7,2)
而不是NUMERIC(7,2)
.
于 2012-07-06T18:52:13.983 回答