0

我正在尝试创建一个 sql 函数,该函数在给出客户姓名时打印客户所做的预订。客户姓名位于名为 CLIENTS.FNAME CLIENTS.MNAME CLIENTS.LNAME 的表中,通过 id-外键搜索的预订有显示“值过多”错误的函数代码,也许必须完成通过循环还是什么?

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;
4

1 回答 1

2

您的 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.*,您可以准确选择记录类型所需的列数、类型和序列。

于 2017-01-17T11:40:53.800 回答