创建表的麻烦
Posted
技术标签:
【中文标题】创建表的麻烦【英文标题】:Troubles creating tables 【发布时间】:2018-09-13 01:41:31 【问题描述】:我正在尝试执行两个表,但我不断收到错误。事务表说它不能在没有创建另一个的情况下执行,然后我尝试创建代理表,它说缺少右括号
SQL 错误:ORA-00907:缺少右括号
但我检查了我的代码,它看起来不错。你们有谁知道是什么问题吗?感谢所有评论的人!
Create table Broker
(
Broker_Number Number(7,0)
Constraint PK_Broker_Broker_Number Primary Key
Constraint NN_Broker_Broker_Number Not Null,
First_Name Varchar2(25)
Constraint NN_Broker_First_Name Not Null,
Last_Name Varchar2(3O)
Constraint NN_Broker_Last_Name Not Null,
Area_Code Number(3,0)
Default '780'
Constraint NL_Broker_Area_Code Null,
Phone_Number Number(7,0)
Constraint NL_Broker_Phone_Number Null,
Email_Address Varchar2(50)
Constraint CK_Broker_Email_Address Check (REGEXP_like(Email_Address,'%@%.%'))
Constraint NN_Broker_Email_Address Not Null
);
Create table Transaction
(
Portfolio_Number Number(7,0) Not Null,
Constraint FK_Trans_Portfolio_Number
Foreign Key (Portfolio_Number)
References Portfolio(Portfolio_Number),
Stock_Code Varchar2(10) Not Null,
Constraint FK_Transaction_Stock_Code
Foreign Key (Stock_Code)
References Stock(Stock_Code),
Transaction_Date Date
Constraint PK_Trans_Transaction_Date Not Null,
Exchange_Code Varchar2(4) Not Null,
Constraint FK_Transaction_Exchange_Code
Foreign Key (Exchange_Code)
References Exchange(Exchange_Code),
Broker_Number Number(7,0) Not Null,
Constraint FK_Transaction_Broker_Number
Foreign Key (Broker_Number)
References Broker(Broker_Number),
Buy_Sell Char(1)
Constraint CK_Transaction_Buy_Sell Check (Buy_Sell in ('B','S') )
Constraint NN_Transaction_Buy_Sell Not Null,
Quantity Number(7,0)
Constraint NN_Transaction_Quantity Not Null,
Price_Per_Share Number(6,2)
Constraint NN_Transaction_Price_Per_Share Not Null
)
【问题讨论】:
不太了解 PL/SQL,但TRANSACTION
是我熟悉的各种 SQL 中的关键字,包括 PL/SQL。我怀疑你不能有一个名为Transaction
的表,除非你将它括在括号或其他东西中,即使那样我认为这是一个坏主意。 Here's 一些文档。
我尝试添加括号,但无法确定它不起作用。我需要弄清楚为什么它会给出错误并且我尝试了一切
我建议你把你的表名改成别的,看看会发生什么。
@BobRodes 无论名称如何,我都无法创建事务表,因为它需要代理表中的一列,但无法创建代理表,因为它有一个错误,我不知道如何修复
@mohammedtarrabain:如果你想使用保留关键字作为标识符,SQL 需要双引号,例如:"transaction"
,但请注意名称是区分大小写的。 "Transaction"
与 "TRANSACTION"
或 "transaction"
的名称不同。详情见手册:docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/…
【参考方案1】:
就是这条线
姓氏 Varchar2(3O)
这不是 30,而是 3O,就像数字三后面的字母 O。
调试此类错误语句的一种方法是一次删除一列,运行该语句,然后重复该过程,直到不再遇到错误为止。在这种情况下,我删除了这个特定的行并且它工作正常。那时我注意到编辑器中的 O 而不是 0。
【讨论】:
好收获。 :) 我自己可能已经在寻找它,但发现 Transaction 是一个关键字。以上是关于创建表的麻烦的主要内容,如果未能解决你的问题,请参考以下文章