【发布时间】:2020-11-02 07:33:02
【问题描述】:
我有两个表COURSES 和COURSE_PRICELIST,我创建了这个函数来获取一个值并将这个值放入一个变量中:
create or replace function "GET_PUBLIC_COURSE_AMMOUNT" (course_id in number)
return number
is
TC_Ammount number;
begin
select COURSE_PRICELIST.PRICE
into TC_Ammount
from COURSES
join COURSE_PRICELIST
on COURSES.ID = COURSE_PRICELIST.COURSE_ID
where COURSE_PRICELIST.ACTIVE = 1
and COURSES.ID = course_id;
return TC_Ammount;
end;
问题是当我运行这个select 语句时它只返回一行(这正是我想要的),但是当我试图将此语句用作函数时:
DECLARE
TCPL NUMBER;
BEGIN
TCPL := GET_PUBLIC_COURSE_AMMOUNT(90);
END;
我有这个错误:
ORA-01422:精确提取返回的行数超过了请求的行数
ORA-06512:在“PAADB.GET_PUBLIC_COURSE_AMMOUNT”,第 8 行
ORA-06512:在第 4 行
ORA-06512:在“SYS.DBMS_SQL”,第 1721 行
我确定这个函数的结果只有一行,我不想使用cursor。
【问题讨论】:
-
好吧,显然你的
SELECT确实返回不止一行。您需要检查您的参数并使用完全相同的course_id执行函数。 -
感谢您的回复!由于每个 course_id 的限制 (COURSE_PRICELIST.ACTIVE =1),我只有一个有效价格,我对其进行了三次检查。也许问题是因为 course_id 是我的第二个表(COURSE_PRICELIST)的 fk,并且允许在此表中添加多次相同的 course_id....例如,我在此表中有三个 course_id = 90 但只有一个是活跃。
标签: oracle oracle-sqldeveloper