【问题标题】:Creating SQL table创建 SQL 表
【发布时间】:2014-11-01 12:39:16
【问题描述】:

我正在尝试创建下表,但 Oracle 告诉我缺少关键字。我查看了我看不到问题的代码。请帮忙

CREATE TABLE lecture
(LectureID integer not null,
StartDate date not null,  
StartTime time not null,
EndTime time not null, 
TicketID integer not null, 
PRIMARY KEY (LectureID),
FOREIGN KEY (TicketID) REFERENCES ticket(TicketID) ON DELETE RESTRICT ON UPDATE CASCADE);

这是我得到的错误代码

ORA-00905:缺少关键字

【问题讨论】:

  • Oracle 没有time 数据类型:docs.oracle.com/cd/E11882_01/server.112/e26088/…
  • @约瑟夫。 . .我相信这两个答案都是正确的。您需要修复引用和数据类型。
  • 我需要实现 ON DELETE RESTRICT ON UPDATE CASCADE 效果,在 oracle 中如何实现?
  • 我更新了代码,但仍然收到错误“ORA-00911:无效字符”CREATE TABLE 讲座(LectureID 整数非空,StartDate 日期,StartTime 时间戳非空,EndTime 时间戳非空,TicketID 整数非空,主键(LectureID)); FOREIGN KEY (TicketID) REFERENCES ticket(TicketID));
  • 主键(LectureID)); => 主键(LectureID)

标签: sql oracle ddl


【解决方案1】:

Oracle 中没有“on update cascade”

【讨论】:

    【解决方案2】:

    Oracle 不支持时间数据类型 您在 oracle 中将有以下日期时间选项

     DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, and TIMESTAMP WITH LOCAL TIME ZONE.
    

    有关日期时间的详细信息,您可以参考: Click Here

    CREATE TABLE lecture
    (LectureID integer not null,
    StartDate date not null,  
    StartTime TIMESTAMPnot null,
    EndTime TIMESTAMPnot null, 
    TicketID integer not null, 
    PRIMARY KEY (LectureID),
    FOREIGN KEY (TicketID) REFERENCES ticket(TicketID) ON DELETE RESTRICT ON UPDATE CASCADE);
    

    【讨论】:

    • @Joseph 很抱歉忘记了 Oracle 中不允许更新级联。很高兴为您提供帮助
    • @Joseph 这是实现功能的最佳方式:请参考stackoverflow.com/questions/22871300/…
    • 我更新了代码,但仍然收到错误“ORA-00911:无效字符”CREATE TABLE 讲座(LectureID 整数非空,StartDate 日期,StartTime 时间戳非空,EndTime 时间戳非空,TicketID 整数非空,主键(LectureID)); FOREIGN KEY (TicketID) REFERENCES ticket(TicketID));
    • 谢谢哈迪克,正是我需要的解释
    • 那个链接有用吗?这里还有一个你会发现非常有用的链接techonthenet.com/oracle/foreign_keys/foreign_keys.php
    【解决方案3】:

    Oracle 中没有 ON UPDATE 和 DELETE RESTRICT 子句。这些是 mysql 选项

    【讨论】:

    • 我可以使用什么子句在 oracle 中实现相同的效果?谢谢
    • 您只有三个 DELETE 选项 CASCADE、SET NULL 或 NO ACTION。您必须使用 NO ACTION 子句。 Oracle 不支持 CASCADE UPDATE。你必须写一个触发器。
    • Oracle.Go 中没有任何子句可以使用触发器。
    • CREATE TABLE 讲座( LectureID 整数不为空,StartDate 日期,StartTime 时间戳不为空,EndTime 时间戳不为空,TicketID 整数不为空,主键(LectureID),外键(TicketID)参考票(TicketID ));您必须删除多余的分号
    • 谢谢你们有帮助,我会解决的。我仍然是数据库的新手。感谢您的耐心等待。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2018-01-18
    • 2015-11-07
    • 2010-10-05
    相关资源
    最近更新 更多