Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przykłady dla kursorów PLSQL - kursory jawne, niejawne i odsyłające

Kursor logicznie działa jako wskaźnik do zestawu wyników. Możesz przesuwać kursor w zestawie wyników, przetwarzając każdy wiersz, aż ustalisz, że jesteś na końcu zestawu wyników. Istnieją trzy typy składni związane z kursorami:tworzenie kursora, pobieranie za pomocą kursora i zamykanie kursora. Ponadto istnieje wiele atrybutów kursora, których możesz użyć w swoich logicznych porównaniach. Oto typy kursorów w Oracle:

Wyraźne kursory

Explicit Cursors to kursory, które deklarujesz i używasz.

Kursory niejawne

PL/SQL umożliwia uwzględnienie instrukcji SQL, w tym instrukcji SELECT, jako części kodu bez deklarowania kursora, zwanego niejawnym kursorem.

Kursory odnośników

Kursor odwołuje się do zestawu wyników. REF CURSOR umożliwia przekazywanie odniesienia kursora z jednej jednostki programu PL/SQL do drugiej. Innymi słowy, pozwala stworzyć zmienną, która otrzyma kursor i umożliwi dostęp do jego zbioru wyników, ale w tym blogu podam przykłady tylko dla kursorów jawnych i niejawnych, podam przykład dla kursorów Ref i Dynamiczny kursor na innym blogu .Przykład Explicit Cursor:DECLARE nemployeeid NUMBER; ddata_początkowa DATA; data data; sjobid VARCHAR2 (20); -- zadeklaruj kursor CURSOR curjob IS SELECT id_pracownika, data_początkowa, data_końcowa, id_pracy FROM hr.job_history;BEGIN OPEN curjob; LOOP FETCH curjob INTO nemployeeid, dstartdate, denddate, sjobid; WYJDŹ, KIEDY curjob% NOTFOUND; DBMS_OUTPUT.put_line( 'Pracownik ' || nemployeeid || 'miał pracę ' || sjobid || ' dla ' || (denddate - dstartdate) || ' dni.'); PĘTLA KOŃCOWA; CLOSE curjob;END;/Ten sam przykład jest podany poniżej dla jawnego kursora, ale z For Loop, kursory For Loop są bardziej inteligentne, ponieważ nie ma potrzeby deklarowania zmiennych do pobierania z nich wartości i nie ma potrzeby otwierania lub zamykania lub sprawdzania, czy wskaźnik znajduje się na końcu kursora. Oto przykład:DECLARE CURSOR curjob IS SELECT worker_id, start_date, end_date, job_id FROM hr.job_history;BEGIN FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Pracownik ' || jh_rec.employee_id || | ' miał pracę ' .job_id || ' dla ' || ( jh_rec.end_date - jh_rec.start_date || ' dni.')); END LOOP;END;/Przykład niejawnego kursora:DECLARE nempno NUMBER; CURSOR curjob IS SELECT worker_id, start_date, end_date, job_id FROM hr.job_history;BEGIN -- poniżej zapytania sql znajduje się typ niejawnego kursora SELECT COUNT ( * ) INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line ( 'Istnieją ' || nempno || ' rekordy historii pracowników.'); FOR jh_rec IN curjob PĘTLA DBMS_OUTPUT.put_line( ''Pracownik ' || jh_rec.employee_id || ' miał pracę ' || jh_rec.job_id || ' dla ' || ( jh_rec.end_date - jh_rec.dni._data || )); KONIEC PĘTLI;KONIEC;/
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wysłać e-mail za pomocą Oracle 10 g Forms

  2. Pobierz BLOB z kolumny BFILE w Oracle

  3. Konwertuj Unixtime na Datetime SQL (Oracle)

  4. Jak uciec w tym samym czasie od przecinka i podwójnego cudzysłowu dla pliku CSV?

  5. Jak wyświetlić wynik/wyjście refcursora w Oracle SQL Developer?