Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was ist der Unterschied zwischen expliziten und impliziten Cursorn in Oracle?

Ein impliziter Cursor wird von Oracle "automatisch" für Sie erstellt, wenn Sie eine Abfrage ausführen. Es ist einfacher zu codieren, leidet aber unter

  • Ineffizienz (der ANSI-Standard legt fest, dass zweimal abgerufen werden muss, um zu prüfen, ob mehr als ein Datensatz vorhanden ist)
  • Anfälligkeit für Datenfehler (wenn Sie jemals zwei Zeilen erhalten, löst dies eine TOO_MANY_ROWS-Ausnahme aus)

Beispiel

SELECT col INTO var FROM table WHERE something;

Ein expliziter Cursor ist einer, den Sie selbst erstellen. Es erfordert mehr Code, bietet aber mehr Kontrolle - Sie können beispielsweise einfach öffnen, abrufen und schließen, wenn Sie nur den ersten Datensatz möchten und sich nicht darum kümmern, ob es noch andere gibt.

Beispiel

DECLARE   
  CURSOR cur IS SELECT col FROM table WHERE something; 
BEGIN
  OPEN cur;
  FETCH cur INTO var;
  CLOSE cur;
END;