これがすべて PL/SQL プログラム内で行われる場合、何も宣言する必要はありません。暗黙カーソルを使用して、PL/SQL にそれを理解させます。
declare
tot_sal number(23,2) := 0;
begin
for r in ( select dept.dept_no
, emp.sal
from dept
join emp (on emp.deptno = dept,deptno) )
loop
tot_sql := tot_sql + r.sql;
end loop;
end;
これを CURSOR FOR ループの有効な使用法として推奨しているわけではありません。これは、物事を機能させるために必要なインフラストラクチャがいかに少ないかを示しているだけです。
さらに構造が必要な場合は、次のように %ROWTYPE キーワードを使用してカーソルを参照できます。
CURSOR cur_customer IS
SELECT c.customer_id, c.name, o.order_date
FROM customer c, order o
WHERE c.customer_id = o.customer_id;
rec_customer cur_customer%ROWTYPE;
つまり、テーブルを使用するのと同じように、カーソルを使用してレコード変数を定義できます。
プログラム単位、特にパッケージ間で共有できる構造を定義する場合は、RECORD 型を宣言します。このようなもの:
TYPE emp_rec IS RE(ORD
(emp_dept_name dept.dname%type
, emp_name emp.ename%type
, emp_sal emp.sql%type );
これを使用して、%ROWTYPE を使用する場所であればどこでも、プログラム ユニットのパラメーターなど、さまざまなものを定義できます。そのような宣言をパッケージ仕様に入れ、複数のパッケージで共有します。
FUNCTION get_emp (p_id emp.empno%type) return emp_rec%rowtype;
詳細をご覧ください。