Sie müssen den Datensatztyp deklarieren, bevor Sie ihn im Cursor verwenden, und dann eine Variable deklarieren, damit der Datensatz an den Cursor übergeben und dann den Cursor durchlaufen kann.
DECLARE
TYPE dtype_amount IS RECORD (
typecode DD_DONOR.TYPECODE%TYPE,
amount DD_PLEDGE.PLEDGEAMT%TYPE
);
CURSOR donnor_pledge (p_typeamount dtype_amount ) IS
SELECT d.FIRSTNAME,
d.LASTNAME,
p.PLEDGEAMT
FROM DD_DONOR d
INNER JOIN DD_PLEDGE p
USING (IDDONOR)
WHERE d.TYPECODE = p_typeamount.typecode
AND p.PLEDGEAMT > p_typeamount.amount;
p_typeamount dtype_amount;
p_name_amount donnor_pledge%ROWTYPE;
BEGIN
p_typeamount.typecode := 'I';
p_typeamount.amount := 250;
OPEN donnor_pledge(p_typeamount);
LOOP
FETCH donnor_pledge INTO p_name_amount;
EXIT WHEN donnor_pledge%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Donor name: ' || p_name_amount.FIRSTNAME || ' ' || p_name_amount.LASTNAME);
DBMS_OUTPUT.PUT_LINE('Pledge amount: ' || p_name_amount.PLEDGEAMT);
END LOOP;
CLOSE donnor_pledge;
END;
/
oder Sie können es ohne den Datensatz tun, indem Sie zwei Parameter für den Cursor verwenden:
DECLARE
CURSOR donnor_pledge (p_typecode CHAR, p_amount NUMBER ) IS
SELECT d.FIRSTNAME,
d.LASTNAME,
p.PLEDGEAMT
FROM DD_DONOR d
INNER JOIN DD_PLEDGE p
USING (IDDONOR)
WHERE d.TYPECODE = p_typecode
AND p.PLEDGEAMT > p_amount;
p_name_amount donnor_pledge%ROWTYPE;
BEGIN
OPEN donnor_pledge('I', 250);
LOOP
FETCH donnor_pledge INTO p_name_amount;
EXIT WHEN donnor_pledge%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Donor name: ' || p_name_amount.FIRSTNAME || ' ' || p_name_amount.LASTNAME);
DBMS_OUTPUT.PUT_LINE('Pledge amount: ' || p_name_amount.PLEDGEAMT);
END LOOP;
CLOSE donnor_pledge;
END;
/
db<>fiddle hier