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
1
A
回答
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)
);
2
您正试图创建涉及一列DrugSupplierNumber
不是表的一部分外键约束。您不希望在此表上创建外键,或者您想要向此表中添加DrugSupplierNumber
列,或者您想在约束中引用此表中的其他列之一。我的猜测是,你忘了将DrugSupplierNumber
列添加到表定义。
虽然它在语法上是有效的,但在Oracle表中声明列为smallint
的行为不太可能正在做你想做的事情。这是NUMBER(38)
的别名,因此如果您来自非Oracle数据库,它不会提供任何(合理的)上限,就像您期望的那样。
SQL> create table foo(col1 smallint);
Table created.
SQL> desc foo
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER(38)
此外,在Oracle,这将是更加常规的申报字符串列作为VARCHAR2
而非VARCHAR
和作为NUMBER(7,2)
而非NUMERIC(7,2)
申报UnitCost
柱。
相关问题
- 1. 代码输出不正确
- 2. 代码不正确排序
- 3. 码生成不正确的HTML代码
- 4. jQuery代码正确
- 5. 从.Net代码访问Oracle DB后正确清理
- 6. 不正确的HTTP状态代码
- 7. 不正确的结果在C代码
- 8. 批量嵌套代码不正确?
- 9. 代码找不到正确的方差
- 10. findPattern()Python代码...不正确执行?
- 11. 计数器代码不正确计数
- 12. Gitorious源代码路由不正确
- 13. 代码不能正确显示输出
- 14. 该代码不会重新正确
- 15. HTML代码不能正确呈现
- 16. 正确的代码不会编译?
- 17. ANTLR4生成不正确的java代码
- 18. $ wp_query代码显示不正确
- 19. 围栏代码块不突出正确
- 20. Html颜色代码显示不正确?
- 21. VBA - 不正确的图形代码
- 22. Javascript代码不计日期正确
- 23. Wordpress格式代码不正确
- 24. C++代码不正确编译
- 25. PHPEclipse代码模板不正确缩进
- 26. Specflow生成的代码不正确?
- 27. 总下载代码不正确
- 28. VB.Net正确的代码不起作用?
- 29. Python代码输出显示不正确
- 30. Sylius语言环境代码不正确
我没有看到毒品表格定义中的DrugSupplierNumber列。 Oracle同意我的观点 - 添加一个。 – duffymo 2012-07-06 18:47:43