Oracle 这些错误是什么意思?您建议我如何修复它们?
我刚开始学习SQL,目前正在课堂上学习。我正在尝试编写满足以下要求的代码: 预订:输入参数:酒店、客人姓名、开始日期、结束日期、房间类型、预订日期。输出:预订ID。注意:每个预订只有一位客人。但是,同一位客人可以进行多次预订 查找预订:输入是客人的姓名和日期、酒店ID。输出是预订ID 我对破译错误代码还是有点陌生,并试图查找它们的含义。然而,我仍然不太清楚为什么我的代码是错误的Oracle 这些错误是什么意思?您建议我如何修复它们?,oracle,Oracle,我刚开始学习SQL,目前正在课堂上学习。我正在尝试编写满足以下要求的代码: 预订:输入参数:酒店、客人姓名、开始日期、结束日期、房间类型、预订日期。输出:预订ID。注意:每个预订只有一位客人。但是,同一位客人可以进行多次预订 查找预订:输入是客人的姓名和日期、酒店ID。输出是预订ID 我对破译错误代码还是有点陌生,并试图查找它们的含义。然而,我仍然不太清楚为什么我的代码是错误的 CREATE OR REPLACE PACKAGE hotelmanagement AS FUNCTION ma
CREATE OR REPLACE PACKAGE hotelmanagement AS
FUNCTION make(rsrv_id VARCHAR2
,hotel_name VARCHAR2
,guest VARCHAR2
,start_date VARCHAR2
,end_date VARCHAR2
,room_type VARCHAR2
,rsrv_date VARCHAR2)
RETURN NUMBER IS
rsrv_id NUMBER;
BEGIN
SELECT rsrv_seq.nextval INTO reserve_id FROM dual;
INSERT INTO reservations
VALUES
(reserve_id, 'Four Seasons', 'Amanda', 'July-30-2019', 'Aug-8-2019',
'King', 'July-18-2019');
tot_rsrv := tot_rsrv + 1;
RETURN(rsrv_id);
END;
FUNCTION find(guest VARCHAR2
,rsrv_date VARCHAR2)
RETURN NUMBER IS
rsrv_id NUMBER;
BEGIN
SELECT rsrv_id
INTO guest
FROM reservations
WHERE rsrv_date = find_rsrv_date;
END;
RETURN(rsrv_id);
END hotelmanagement;
我有以下错误消息(其中两条看起来相同?):
错误(4,1):PLS-00103:在预期以下情况之一时遇到符号“选择”:开始函数pragma过程子类型当前光标删除在符号“开始”替换为“选择”之前存在,以继续
错误(5,1):PLS-00103:在预期以下情况之一时遇到符号“RSRV_ID”:语言
错误(5,1):PLS-00103:在预期以下情况之一时遇到符号“RSRV_ID”:语言
要求非常模糊,因此很难提供所需的程序。无论如何,您的代码有一些弱项
- 您的过程有几个输入参数,但在过程中不使用它们李>
- 使用适当的数据类型,即从不(!)以字符串形式存储日期或数字值,即
。仅对字符串数据使用VARCHAR2
。至少你使用四位数的年份,这是正确的方法VARCHAR2
命令不使用括号RETURN
CREATE OR REPLACE PACKAGE BODY hotelmanagement AS
FUNCTION make( -- you can't declare variable "rsrv_id" twice
hotel_name IN VARCHAR2
,guest IN VARCHAR2
,start_date IN DATE
,end_date IN DATE
,room_type IN VARCHAR2
,rsrv_date IN DATE)
RETURN NUMBER IS
rsrv_id NUMBER;
BEGIN
INSERT INTO reservations
VALUES
(rsrv_seq.nextval, hotel_name, guest, start_date, end_date,
room_type, rsrv_date)
RETURNING reserve_id INTO rsrv_id ;
-- tot_rsrv := tot_rsrv + 1; -> I don't see any use for it, variable tot_rsrv is not declared
RETURN rsrv_id;
END;
FUNCTION find(v_guest IN VARCHAR2
,rsrv_date IN DATE) RETURN NUMBER IS
rsrv_id NUMBER;
BEGIN
SELECT rsrv_id
INTO rsrv_id
FROM reservations
WHERE rsrv_date = find_rsrv_date
and guest = v_guest; -- don't use "guest = guest" because this will select all rows.
RETURN rsrv_id;
END;
END hotelmanagement;
嗯,你确定MySQL标签是对的吗?看起来更像Oracle…insert语句需要指定要插入的列。@Boneist,insert的列不是必需的,但确实强烈建议使用。是的,但在生产代码中,应该始终指定它们。这只是一个很好的实践,如果有人添加了一个列而没有更新代码,它将避免bug。