【发布时间】:2026-01-20 13:30:02
【问题描述】:
我正在完成一项家庭作业,但遇到了存储过程的问题。
我有以下表格:
create table Restaurant(rID int, name varchar2(100), address varchar2(100), cuisine varchar2(100));
create table Reviewer(vID int, name varchar2(100));
create table Rating(rID int, vID int, stars int, ratingDate date);
对于我需要创建的存储过程,我输入了餐厅名称(唯一)、评论者姓名(唯一)、星级和评论日期。我需要使用正确的信息更新 Rating 表,如果之前不存在于表中,则将新的评论者添加到 Review 表中。
为了启动我的存储过程,我想首先创建一个名为 newReview 的新表,以获取存储在新表中的输入,然后重新编写以更新现有表。
这是新的评论表
CREATE TABLE newReview(
RestaurantName VARCHAR(100),
UserName VARCHAR(100),
Stars Int,
RatingDate Date
)
这是我的 AddNewReview 过程,编译成功:
CREATE OR REPLACE PROCEDURE AddNewReview(
RESTAURANTNAME IN VARCHAR2 (100)
, USERNAME IN VARCHAR2 (100)
, Stars IN NUMBER
, RATINGDATE IN DATE
) AS
BEGIN
INSERT INTO newReview VALUES (RestaurantName, UserName, Stars, RatingDate);
END AddNewReview;
;
但是,当我使用这样的输入运行存储过程时,
BEGIN
AddNewReview ('Rangoli', 'Sarah M.', 4, '2020-11-21');
END;
我收到以下错误:
Error starting at line : 20 in command -
BEGIN
AddNewReview ('Rangoli', 'Sarah M.', 4, '2020-11-21');
END;
Error report -
ORA-06550: line 2, column 5:
PLS-00905: object TOCONN22.ADDNEWREVIEW is invalid
ORA-06550: line 2, column 5:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
我尝试将日期输入定义为DATE '2020-11-21',并将单引号切换为双引号。我哪里出错了,因为这是我写的第一个存储过程。
【问题讨论】: