错误ORA-01722:无效号码ORA-06512:at";SYS.DBMS_SQL";,第1721行
我使用创建了以下表格和约束错误ORA-01722:无效号码ORA-06512:at";SYS.DBMS_SQL";,第1721行,sql,oracle,Sql,Oracle,我使用创建了以下表格和约束 奥克胡酒店(ht胡编号,ht胡名称,ht胡城市) oak_客人(gt_编号,gt_姓名,gt_地址) 橡木房(房间号、房间号、房间类型、房间价格) oak_预订(htbk_编号、gtbk_编号、bk_日期从、bk_日期到、人民币K_编号) 制约因素有: 橡木房的客房类型应限制为“单人房”或“双人房”或“家庭房” bk_dateFrom和bk_dateto不应小于当前日期(通过实现触发器实现) 最后,如上图所示,主键和外键(如适用) 用于创建表和约束的SQL语句
- 奥克胡酒店(ht胡编号,ht胡名称,ht胡城市)
- oak_客人(gt_编号,gt_姓名,gt_地址)
- 橡木房(房间号、房间号、房间类型、房间价格)
- oak_预订(htbk_编号、gtbk_编号、bk_日期从、bk_日期到、人民币K_编号)
- 橡木房的客房类型应限制为“单人房”或“双人房”或“家庭房”
- bk_dateFrom和bk_dateto不应小于当前日期(通过实现触发器实现)
- 最后,如上图所示,主键和外键(如适用)
CREATE TABLE oak_Hotel (
ht_no int NOT NULL,
ht_name varchar(25),
ht_city varchar(25),
CONSTRAINTS PK_hotel PRIMARY KEY(ht_no)
);
CREATE TABLE oak_Guest (
gt_no int NOT NULL,
gt_name varchar(25),
gt_address varchar(25),
CONSTRAINTS PK_guest PRIMARY KEY(gt_no)
);
CREATE TABLE oak_Room (
rm_no int NOT NULL UNIQUE,
htrm_no int NOT NULL,
rm_type varchar(25),
rm_price NUMERIC(6, 2),
CONSTRAINTS PK_room PRIMARY KEY (rm_no, htrm_no),
CONSTRAINTS FK_guest FOREIGN KEY (htrm_no) REFERENCES
oak_Hotel(ht_no)
);
ALTER TABLE oak_Room
ADD CONSTRAINT CHK_Oak_room CHECK ((rm_type='Single' OR
rm_type='DOUBLE' OR rm_type='Family') AND (rm_price>=100
AND rm_type<=1000) AND (rm_no>=1 AND rm_no<=100));
CREATE TABLE oak_Booking (
htbk_no int NOT NULL,
gtbk_no int NOT NULL,
bk_dateFrom date NOT NULL,
bk_dateto date,
rmbk_no int,
CONSTRAINTS PK_booking PRIMARY KEY (htbk_no, gtbk_no, bk_dateFrom),
CONSTRAINTS FK_booking_htno FOREIGN KEY (htbk_no) REFERENCES oak_Hotel(ht_no),
CONSTRAINTS FK_booking_gtno FOREIGN KEY (gtbk_no) REFERENCES oak_Guest(gt_no),
CONSTRAINTS FK_booking_rmno FOREIGN KEY (rmbk_no) REFERENCES oak_Room(rm_no)
);
CREATE OR REPLACE TRIGGER trg_check_dates
BEFORE INSERT OR UPDATE ON oak_Booking
FOR EACH ROW
BEGIN
IF( :new.bk_dateFrom < SYSDATE )
THEN
RAISE_APPLICATION_ERROR( -20001,
'Invalid DA=ateFrom: CloseDate must be greater than the current date - value = ' || to_char( :new.bk_dateFrom, 'YYYY-MM-DD HH24:MI:SS' ) );
END IF;
IF( :new.bk_dateto <= SYSDATE )
THEN
RAISE_APPLICATION_ERROR( -20001,
'Invalid DA=ateFrom: CloseDate must be greater than the current date - value = ' || to_char( :new.bk_dateto, 'YYYY-MM-DD HH24:MI:SS' ) );
END IF;
END;
执行以下语句时会弹出错误
-- ****** Hotel Room ******
INSERT INTO oak_Room
VALUES (1, 1234, 'Single', 100.00);
ORA-01722: invalid number ORA-06512: at "SYS.DBMS_SQL", line 1721
有约束的问题
您使用了rm\u类型
-- ****** Hotel Room ******
INSERT INTO oak_Room
VALUES (1, 1234, 'Single', 100.00);
ORA-01722: invalid number ORA-06512: at "SYS.DBMS_SQL", line 1721
ALTER TABLE oak_Room
ADD CONSTRAINT CHK_Oak_room CHECK ((rm_type='Single' OR
rm_type='DOUBLE' OR rm_type='Family') AND (rm_price>=100
AND rm_price<=1000) AND (rm_no>=1 AND rm_no<=100));