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: 值太多的主要内容,如果未能解决你的问题,请参考以下文章

SQL 错误:ORA-00913:值太多

ORA-00913: oracle 子查询中的值太多

PL/SQL 过程 - 值太多

SQL、值过多、结果合并

ORA-00913: 使用大小写时值太多

ORA-29270:从pl / sql过程调用webservice时,有太多打开的HTTP请求