Wir können einen benutzerdefinierten Datensatztyp definieren, der der Projektion einer bestimmten Abfrage in PL/SQL entspricht. Ein Vorteil davon ist die Möglichkeit, einen Tabellentyp aus dem Datensatztyp zu definieren, der für das Abrufen mehrerer Datensätze nützlich ist.
DECLARE
type v_rec_t is record (
ename emp.ename%type
, loc dept1.loc%type
);
l_rec v_rec_t;
type v_rec_nt is table of v_rec_t;
l_recs v_rec_nt;
BEGIN
SELECT A.ename, b.loc
INTO l_rec
FROM emp A, dept1 b
WHERE A.deptno = b.deptno
AND A.empno = &empno;
dbms_output.put_line(l_rec.ename ||'**'|| l_rec.loc);
-- get multiple rows
SELECT A.ename, b.loc
bulk collect INTO l_recs
FROM emp A
join dept1 b
on A.deptno = b.deptno
where A.deptno = &deptno;
dbms_output.put_line(' emps in dept'|| l_recs.count());
end;
Einer der Gründe explizite Cursor zu definieren ist, dass wir eine Aufzeichnung Variable auf der Basis ihrer Projektion zu definieren:
declare
cursor c_emploc (p_empid emp.empno%type) is
SELECT A.ename, b.loc
FROM emp A, dept1 b
WHERE A.deptno = b.deptno
AND A.empno = p_empid;
r_emploc c_emploc%rowtype;
....
Nein, es ist nicht möglich. Aber Sie können den Cursor aus Ihrer Abfrage deklarieren und den Cursor% roadtype verwenden. –
sir cursor kann mehr Zeilen zurückgeben ..... hier gebe ich nur eine Zeile zurück, während wir empno vom Benutzer geben ...... so gibt es nur eine Zeile zurück –
Sie können einen expliziten Cursor erstellen, der formale Parameter hat, und dann Übergeben Sie bei jedem Öffnen des Cursors verschiedene Aktualparameter an den Cursor. In Ihrem Fall können Sie "empno" an Ihren Cursor übergeben, um die Unterstreichungsabfrage auf nur einen Datensatz zu beschränken. Empfehlen Sie Oracle Dokumentation zu folgen – Himanshujaggi