PL/SQL: ORA-00913: 值太多
Posted
技术标签:
【中文标题】PL/SQL: ORA-00913: 值太多【英文标题】:PL/SQL: ORA-00913: too many values 【发布时间】:2017-01-17 11:18:39 【问题描述】:我正在尝试创建一个 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;
【问题讨论】:
选择返回多条记录,您尝试将记录列表插入一个变量 - 服务器引发异常 看这篇文章“如何返回collection form pl/sql函数”***.com/questions/7888990/… 【参考方案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.*
,您可以准确选择记录类型所需的列数、类型和顺序。
【讨论】:
或者,您可以指定要返回的记录字段,例如SELECT RESID,STARTDATE,ENDDATE,ADDINFO INTO resRecord.resid, resRecord.startdate, resRecord.enddate, resRecord.addinfo from ...
谢谢您的帮助。当我调用该函数时,我仍然收到有关结果的错误。我正在尝试从 resRecord 获取信息。 '代码' DECLARE res RESERVATIONS%ROWTYPE;开始 cName := cl_reserv('Ivan'); DBMS_OUTPUT.PUT_LINE(res);结尾; '代码'以上是关于PL/SQL: ORA-00913: 值太多的主要内容,如果未能解决你的问题,请参考以下文章