我正在尝试创建一个sql函数,用于打印客户在给出其名称时所做的预订。客户名称位于名为CLIENTS.FNAME CLIENTS.MNAME CLIENTS.LNAME的表中,以及由id-外键搜索的预留 该函数的代码显示“太多值”错误,可能必须由Loop或其他东西完成?
create or replace FUNCTION cl_reserv(clName VARCHAR2)
RETURN RESERVATIONS%ROWTYPE
IS
resRecord RESERVATIONS%ROWTYPE;
BEGIN
SELECT RESID,STARTDATE,ENDDATE,ADDINFO INTO resRecord
FROM RESERVATIONS INNER JOIN CLIENTS ON RESERVATIONS.CLIENTID=CLIENTS.CLIENTID
WHERE clName IN (FNAME,MNAME,LNAME);
RETURN resRecord;
END;
答案 0 :(得分:1)
您的SELECT子句与您尝试选择的记录不匹配。像这样更改你的代码:
CREATE OR REPLACE FUNCTION cl_reserv(clName VARCHAR2)
RETURN RESERVATIONS%ROWTYPE
IS
resRecord RESERVATIONS%ROWTYPE;
BEGIN
SELECT r.* INTO resRecord
FROM RESERVATIONS r INNER JOIN CLIENTS c ON r.CLIENTID=c.CLIENTID
WHERE clName IN (FNAME,MNAME,LNAME);
RETURN resRecord;
END cl_reserv;
通过使用r.*
,您可以准确选择记录类型所需的列数,类型和顺序。