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;
DECLARE
TCPL NUMBER;
BEGIN
TCPL := GET_PUBLIC_COURSE_AMMOUNT(90);
END;
ORA-06512:在“sys.dbms_sql”处,第1721行
我确信这个函数的结果只有一行,我不想使用游标
。
问题是函数参数course_id
与表course_pricelist
中的列同名。因此,在select
中,它的行为类似于1=1
并返回所有行。
在PL/SQL中给变量和参数加前缀是很好的做法,这样就不会发生这样的错误,例如:
create or replace function GET_PUBLIC_COURSE_AMMOUNT (p_course_id in number)
return number
is
v_TC_Ammount number;
begin
select COURSE_PRICELIST.PRICE
into v_TC_Ammount
from COURSES
join COURSE_PRICELIST
on COURSES.ID = COURSE_PRICELIST.COURSE_ID
where COURSE_PRICELIST.ACTIVE = 1
and COURSES.ID = p_course_id;
return v_TC_Ammount;
end;
在第1行声明 * 错误: ORA-01422:精确提取返回的行数超过请求的行数 ORA-06512:在第11行 这是我的代码。
剧本: 新的SQL和PL/SQL,所以我将感谢任何帮助。
Select语句在Resault中返回多行。是否可以用此函数获得resault中的所有行? ORA-01422:精确提取返回的行数多于请求的行数
问题内容: 是否可以获取从调用范围返回函数的行号? 例: 我认为这是不可能的,因为它应该已经从堆栈中删除了,但是也许它仍然被缓存在某个地方? 用例是我有一个HTTP处理程序,我想记录返回错误的行和文件名,而不必乱扔代码。 问题答案: AFAIK,不可能自动获取执行最后一次返回的行。 但是,有了一个小帮手,您可以拥有: 操场 输出: