ORACLE SQL 脚本不创建表也不开发约束

问题描述 投票:0回答:1
create table flight (
    flight_Ref_No       VARCHAR(11)     NOT NULL,
    flightCrewList_ID   NUMBER(10)  NOT NULL,
    aircraft_Model_No   VARCHAR(6)  NOT NULL,
    flight_Date         DATE        NOT NULL,
    flight_Time         TIME        NOT NULL,
    Departure       VARCHAR(50)     NOT NULL,
    Arrival         VARCHAR(50)     NOT NULL,

primary key(flight_Ref_No),
foreign key(flightCrewList_ID) references crew_list(C_List_ID),
foreign key(aircraft_Model_No) references aircraft(aircraft_Model_No),
constraint chk_flight_Ref_No check (REGEXP_LIKE(flight_Ref_No, '^[A-Z]\d\d\d\d-\d\d\d\d$')),
constraint chk_CrewList_No check (REGEXP_LIKE(flightCrewList_ID, '^\d\d\d\d\d\d\d\d\d\d$')),
constraint chk_aircraft_Model_No check (REGEXP_LIKE(aircraft_Model_No, '^[A-Z][A-Z]\d\d\d\d$'))
);

create table aircraft (
    aircraft_Model_No   VARCHAR(6)  NOT NULL,
    aircraft_ID         VARCHAR(10)     NOT NULL,
    flight_Hrs      NUMBER(10,2)    NOT NULL,
    Registration_Num    NUMBER(15)  NOT NULL,
    Manufacturer        VARCHAR(20)     NOT NULL,
    Manufacture_Year    NUMBER(4)   NOT NULL,
    Status          CHAR(1)     NOT NULL,

primary key(aircraft_Model_No, aircraft_ID),
constraint chk_aircraft_Model_No check (REGEXP_LIKE(aircraft_Model_No, '^[A-Z][A-Z]\d\d\d\d$')),
constraint chk_aircraft_ID check (REGEXP_LIKE(aircraft_ID, '^[A-Z][A-Z][A-Z]\d\d\d\d\d\d\d$')),
constraint chk_Status check (UPPER(Status) in ('A','M'))
);

create table maintenance (
    maintenance_ID      NUMBER(10)  NOT NULL,
    aircraft_ID         VARCHAR(10)     NOT NULL,
    maintenance_Team    VARCHAR(5)  NOT NULL,
    Damaged_Parts       VARCHAR(50)     NOT NULL,
    Description         VARCHAR(50)     NOT NULL,

primary key(maintenance_ID),
foreign key(aircraft_ID) references aircraft(aircraft_ID),
constraint chk_maintenance_ID check (REGEXP_LIKE(maintenance_ID, '^\d\d\d\d\d\d\d\d\d\d$')),
constraint chk_aircraft_ID check (REGEXP_LIKE(aircraft_ID, '^[A-Z][A-Z][A-Z]\d\d\d\d\d\d\d$'))
);

create table booking (
    Acc_ID          VARCHAR(10)     NOT NULL,
    booking_ID      NUMBER(7)   NOT NULL,
    flight_Ref_No       VARCHAR(11)     NOT NULL,
    flight_Class        CHAR(1)     NOT NULL,
    Price           NUMBER(10,2)    NOT NULL,

primary key(Acc_ID, booking_ID),
foreign key(Acc_ID) references account(Acc_ID),
foreign key(flight_Ref_No) references flight(flight_Ref_No),
constraint chk_Acc_ID check (REGEXP_LIKE(Acc_ID, '^[A-Z][A-Z][A-Z][A-Z]--\d\d\d\d$')),
constraint chk_flight_Ref_No check (REGEXP_LIKE(flight_Ref_No, '^[A-Z]\d\d\d\d-\d\d\d\d$')),
constraint chk_flight_Class check (UPPER(flight_Class) in ('E','P','B','F'))
);

create table passenger (
    Passport        VARCHAR(9)  NOT NULL,
    passenger_IC        NUMBER(12)  NOT NULL,
    Seat_Num        VARCHAR(3)  NOT NULL,
    First_Name      VARCHAR(10) NOT NULL,
    Last_Name       VARCHAR(20) NOT NULL,
    Gender          CHAR(1)     NOT NULL,
    DOB         DATE        NOT NULL,
    Nationality     VARCHAR(3)  NOT NULL,
    Baggage_Weight      NUMBER(4,2) NOT NULL,
    
primary key(Passport, passenger_IC),
constraint chk_Passport check (REGEXP_LIKE(Passport, '^[A-Z][0-9]+$')),
constraint chk_Seat_Num check (REGEXP_LIKE(Seat_Num, '^[A-Z]\d\d$')),
constraint chk_Gender check (UPPER(Gender) in ('M','F')),
constraint chk_Nationality check (REGEXP_LIKE(Nationality, '^[A-Za-z][A-Za-z][A-Za-z]$'))
);

create table discount (
    discount_Rate       NUMBER(1,2) NOT NULL,
    Price           NUMBER(10,2)    NOT NULL,
    Condition_discount  VARCHAR(100),

primary key(discount_Rate),
foreign key(Price) references booking(Price)
);

create table account (
    Acc_ID          VARCHAR(10)     NOT NULL,
    Email           VARCHAR(35) NOT NULL,
    Password        VARCHAR(20) NOT NULL,
    Created_at      DATE        NOT NULL,
    Last_login_at       TIME        NOT NULL,
    Phone_Num       NUMBER(11)  NOT NULL,
    Acc_Name        VARCHAR(10) NOT NULL,
    Age         NUMBER(2)   NOT NULL,

primary key(Acc_ID, booking_ID),
constraint chk_Acc_ID check (REGEXP_LIKE(Acc_ID, '^[A-Z][A-Z][A-Z][A-Z]--\d\d\d\d$')),
constraint chk_Email check (REGEXP_LIKE(email,'^[a-zA-Z]\w+@(\S+)$'))
);

create table crew_list (
    C_List_ID       NUMBER(10)  NOT NULL,
    pilot_ID        NUMBER(4)   NOT NULL,
    Co-pilot_ID     NUMBER(4)   NOT NULL,
    Stewardess_1_ID     NUMBER(4)   NOT NULL,
    Stewardess_2_ID     NUMBER(4)   NOT NULL,
    Steward_1_ID        NUMBER(4)   NOT NULL,
    Steward_2_ID        NUMBER(4)   NOT NULL,

primary key(C_List_ID),
foreign key(pilot_ID) references pilot(pilot_ID),
foreign key(Co-pilot_ID) references pilot(pilot_ID),
foreign key(Stewardess_1_ID) references crew_cabin(Crew_ID),
foreign key(Stewardess_2_ID) references crew_cabin(Crew_ID),
foreign key(Steward_1_ID) references crew_cabin(Crew_ID),
foreign key(Steward_2_ID) references crew_cabin(Crew_ID),
constraint chk_CrewList_No check (REGEXP_LIKE(C_List_ID, '^\d\d\d\d\d\d\d\d\d\d$'))
);

create table pilot (
    pilot_ID        NUMBER(4)   NOT NULL,
    pilot_Rank      VARCHAR(10) NOT NULL,
    Total_flight_Hrs    NUMBER(10,2)    NOT NULL,
    pilot_Leave_Status  CHAR(1)     NOT NULL,

primary key(pilot_ID, pilot_Rank),
foreign key(pilot_ID) references worker(worker_ID),
constraint chk_pilot_Leave_Status check (UPPER(pilot_Leave_Status) in ('L','W'))
);

create table crew_cabin (
    Crew_ID         NUMBER(4)   NOT NULL,
    Crew_Rank       VARCHAR(10) NOT NULL,
    Working_Hrs     NUMBER(10,2)    NOT NULL,
    Crew_Leave_Status   CHAR(1)     NOT NULL,

primary key(Crew_ID, Crew_Rank),
foreign key(Crew_ID) references worker(worker_ID),
constraint chk_Crew_Leave_Status check (UPPER(Crew_Leave_Status) in ('L','W'))
);

create table worker (
    worker_ID       NUMBER(4)   NOT NULL,
    section_ID      NUMBER(2)   NOT NULL,
    W_First_Name        VARCHAR(10) NOT NULL,
    W_Last_Name     VARCHAR(20) NOT NULL,
    W_Gender        CHAR(1)     NOT NULL,
    W_Age           NUMBER(2)   NOT NULL,
    Date_of_Employment  DATE        NOT NULL,
    W_Email         VARCHAR(35) NOT NULL,
    W_Phone_Num     NUMBER(11)  NOT NULL,
    Salary          NUMBER(6,2) NOT NULL,

primary key(worker_ID),
foreign key(section_ID) references section(section_ID),
constraint chk_worker_Gender check (UPPER(W_Gender) in ('M','F'),
constraint chk_worker_Email check (REGEXP_LIKE(email,'^[a-zA-Z]\w+@(\S+)$'))
);

create table section (
    section_ID      NUMBER(2)   NOT NULL,
    section_Name        VARCHAR(20) NOT NULL,
    Description     VARCHAR(50) NOT NULL,

primary key(section_ID)
);

insert into section values(01, 'TESTING', 'TESTING');

commit;

上面的代码根本不起作用,我不明白为什么。当我尝试在运行 SQL 命令行中运行脚本时,oracle 不断提示以下消息

SP2-0734:以“primary ke...”开头的未知命令 - 行的其余部分被忽略。 SP2-0734:以“约束...”开头的未知命令 - 忽略行的其余部分。 SP2-0734:以“约束...”开头的未知命令 - 忽略行的其余部分。 SP2-0734:以“约束...”开头的未知命令 - 忽略行的其余部分。 SP2-0044:要获取已知命令的列表,请输入 HELP,要退出,请输入 EXIT。 SP2-0042:未知命令“)”- 行的其余部分被忽略。 SP2-0734:以“primary ke...”开头的未知命令 - 行的其余部分被忽略。 SP2-0734:以“foreign ke...”开头的未知命令 - 行的其余部分被忽略。 SP2-0734:以“约束...”开头的未知命令 - 忽略行的其余部分。 SP2-0734:以“约束...”开头的未知命令 - 忽略行的其余部分。

sql database oracle
1个回答
0
投票

如果您在 SQL*Plus 中运行此命令,正如您所看到的那样,请删除

primary key ...
行之前的空白行,或者执行以下操作:

set sqlblanklines on

在脚本开头更改行为。

默认情况下,SQL*Plus 将空行解释为语句的结尾,但不运行它。因此,每个整个

create table
命令的第一部分基本上都会被忽略,而从
primary key
开始直到分离的
;
语句的第二部分被视为独立命令。因此您会收到错误消息,因为这些部分本身无效。

来自文档

设置 SQLBL[ANKLINES] {ON |关闭}
控制 SQL*Plus 是否在 SQL 命令或脚本中放置空行。 ON 将空行和新行解释为 SQL 命令或脚本的一部分。 OFF,默认值,不允许在 SQL 命令或脚本或脚本中出现空行或新行。

© www.soinside.com 2019 - 2024. All rights reserved.