【问题标题】:Trying to run script through Oracle 11g尝试通过 Oracle 11g 运行脚本
【发布时间】:2020-08-04 08:51:18
【问题描述】:

我正在尝试在 Oracle 11g Express 版本中运行 SQL 语句,我将在其中创建表。这是我的 SQL 代码:

    CREATE TABLE STORE
    (
    StoreID INT PRIMARY KEY,
    StoreName VARCHAR2(30) NOT NULL,
    City VARCHAR2(30) NOT NULL,
    Country VARCHAR2(30) NOT NULL CHECK Country in ('China','Egypt','United States','Spain','New Zealand','Mexico','Africa'),
    Phone VARCHAR2(30) NOT NULL,
    Fax VARCHAR2(30),
    Email VARCHAR2(50) UNIQUE,
    Contact VARCHAR2(30) NOT NULL,
    UNIQUE (StoreName, City)
    );

    CREATE TABLE PURCHASE_ITEM
    (
    PurchaseItemID INT PRIMARY KEY,
    StoreID INT NOT NULL REFERENCES STORE(StoreID) ON DELETE CASCADE ON UPDATE CASCADE,
    "Date" DATE NOT NULL,
    Description VARCHAR2(30) NOT NULL,
    Category VARCHAR2(30),
    PriceUsed NUMBER(15, 2)
    );

    CREATE SEQUENCE pur_seq
    START WITH 500 
    INCREMENT BY 5;

    CREATE OR REPLACE TRIGGER Purchase
    BEFORE INSERT ON PURCHASE_ITEM
    FOR EACH ROW
    BEGIN
    SELECT pur_seq.NEXTVAL
    INTO :new.PurchaseItemID
    FROM dual;
    END;

    CREATE TABLE SHIPPER
    (
    ShipperID INT PRIMARY KEY,
    ShipperName VARCHAR2(30) NOT NULL,
    Phone VARCHAR2(30) NOT NULL,
    Fax VARCHAR2(30),
    Email VARCHAR2(50) UNIQUE,
    Contact VARCHAR2(30) NOT NULL
    );

    CREATE TABLE SHIPMENT
    (
    ShipmentID INT PRIMARY KEY Auto Increment,
    ShipperID INT NOT NULL REFERENCES SHIPPER(ShipperID) ON DELETE CASCADE ON UPDATE CASCADE,
    ShipperInvoiceNumber INT NOT NULL UNIQUE,
    Origin VARCHAR2(30) NOT NULL,
    Destination VARCHAR2(30) NOT NULL,
    DepartureDate DATE,
    ArrivalDate DATE
    );

    ALTER TABLE SHIPMENT AUTO_INCREMENT = 100;

    CREATE TABLE SHIPMENT_ITEM
    (
    ShipmentID INT NOT NULL REFERENCES SHIPMENT(ShipmentID) ON DELETE CASCADE ON UPDATE CASCADE,
    ShipmentItemID INT NOT NULL,
    PurchaseItemID INT NOT NULL REFERENCES PURCHASE_ITEM(PurchaseItemID) ON DELETE CASCADE ON UPDATE CASCADE,
    InsuredValue NUMBER(15, 2) NOT NULL defaut 100,
    PRIMARY KEY (ShipmentID, ShipmentItemID)
    );

它只处理了 4 条语句,而且我不断收到这些错误消息:

    CREATE TABLE STORE ( StoreID INT PRIMARY K   -   ORA-00906: missing left parenthesis
    CREATE TABLE PURCHASE_ITEM ( PurchaseItemID INT   -   ORA-00907: missing right parenthesis
    CREATE SEQUENCE pur_seq START WITH 500 INCREMENT BY 5   -   ORA-00955: name is already used by an existing object   
    CREATE OR REPLACE TRIGGER Purchase BEFORE INSERT ON PURCHASE   -   ORA-00942: table or view does not exist  

我完全不熟悉 Oracle 11g。我不确定我是否在其中使用了正确的应用程序来完成我的作业。我只是按照这些说明进行:

“对于这个作业,你要编写脚本来创建表和插入记录。在 oracle 11g 中我不希望你使用工具来生成表,你需要编写脚本来创建表和记录和将需要包含您提交的脚本。”

请问,我做错了什么?

【问题讨论】:

标签: sql oracle11g create-table


【解决方案1】:

让我总结一下你的脚本存在的问题

首先,您必须用大括号将检查约束括起来,如下所示

  CREATE TABLE STORE
        (
        StoreID INT PRIMARY KEY,
        StoreName VARCHAR2(30) NOT NULL,
        City VARCHAR2(30) NOT NULL,
        Country VARCHAR2(30) NOT NULL CHECK (Country in ('China','Egypt','United States','Spain','New Zealand','Mexico','Africa')),
        Phone VARCHAR2(30) NOT NULL,
        Fax VARCHAR2(30),
        Email VARCHAR2(50) UNIQUE,
        Contact VARCHAR2(30) NOT NULL,
        UNIQUE (StoreName, City)
        );

其次,Oracle 11g 中没有ON UPDATE CASCADE,所以需要从CREATE TABLE 语句中删除它

第三,在Oracle 11G 中没有Auto increment 列所以请参阅此SO 以了解解决方法

请通过这些更正告诉我您的问题是否已解决

【讨论】:

  • 好的,这确实有帮助,谢谢!虽然,我仍然在最后一个表 SHIPMENT_ITEM 上收到“ORA-00907:缺少右括号”。不知道丢失的那个在哪里......
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 2013-02-20
  • 2023-03-14
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多