PL/SQLでは、一致する変数に結果を選択する必要があります。 1つの方法は、各列の別々の変数です(図のように)。代わりに、クエリのプロジェクトに一致する行変数を使用します。 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;
のようになります:
- 使用賢明な変数名のローカル変数からパラメータ名を区別
- ハンドル予測可能な例外
出典
2017-04-13 14:10:50
APC
テーブルから変数にデータを格納するために使用できる 'INTO' [link](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems045.htm)の使用に関するOracleのマニュアル –