我试图创建我的第一个oracle程序。 select将返回多条记录;我需要能够将每个记录放在变量中,并在过程的后续操作中使用该记录。有什么帮助吗?
key number;
keyCount number;
rub varchar2(50);
srub varchar2(100);
type varchar2(200);
date varchar2(14);
note varchar2(500);
BEGIN
SELECT KEY,COUNT(KEY),RUB,
SRUB,TYPE ,DATE,NOTE FROM Student
WHERE S_KEY = {key};
END;
答案 0 :(得分:2)
在PL / SQL中,我们需要将结果选择为匹配变量。一种方法是每列的单独变量(如图所示)。另一种方法是使用与查询项目匹配的行变量; find out more
你有一个聚合函数 - COUNT()
所以你需要一个GROUP BY
子句来定义非聚合列。你说你有多个记录,所以你需要填充一个集合而不是标量变量。 Find out more。
你的程序看起来应该是这样的
create or replace procedure my_first_proc
( p_key in student.s_key%type )
as
type my_rec is record (
key number ,
keyCount number ,
rub varchar2(50); ,
srub varchar2(100) ,
type varchar2(200) ,
date varchar2(14),
note varchar2(500)
);
type my_rec_coll is table of my_rec;
l_student_recs my_rec_coll;
BEGIN
SELECT KEY,COUNT(KEY),RUB,SRUB,TYPE ,DATE,NOTE
bulk collect into l_student_recs
FROM Student
WHERE S_KEY = p_key
group by KEY,RUB,SRUB,TYPE ,DATE,NOTE
;
for idx in l_student_recs.first() .. l_student_recs.last()
loop
-- do some processing here
dbms_output.put_line('RUB = '||l_student_recs(idx).rub);
end loop;
EXCEPTION
when no_data_found then
raise_application_error(-01403, 'no student records for key='||p_key);
END;
养成良好的习惯: