创建表的麻烦

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 是一个关键字。

以上是关于创建表的麻烦的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 创建一个表

MYSQL批量创建表的存储过程

MYSQL创建表的约束条件(可选)

如何从多个表的多行创建视图?

创建过程以测量其他表的统计信息。

开发实用小工具-通过类自动创建数据库表,从此摆脱手动建表麻烦