Ich konnte mir keine praktische Situation vorstellen, explizite Cursor im PL/SQL-Code zu verwenden. Kann jemand bitte einige Szenarien teilen? Vielen Dank!Praktische Beispiele für die explizite Cursor-Verwendung von Orakel
Antwort
Wenn ein Cursor mehr als einmal in einer Programmeinheit verwendet wird, ermöglicht eine explizite Cursor Sie die SQL einmal zu kodieren, die für die Wartung gut ist.
Wenn unser Code dasselbe SQL mehr als einmal verwendet, möchten wir vielleicht unser Design erneut in Betracht ziehen. – APC
Aber mit der gleichen SQL mehr als einmal ist nicht notwendig, ein schlechtes Design. – user272735
Es gibt zwei klare Anwendungsfälle für explizite Cursor.
Die erste ist, wenn wir für die Existenz eines Datensatzes und zu handhaben, das Ergebnis in den Hauptstrom unseres Codes sondieren möchten:
open emp_cur (p_empno);
fetch emp_cur into l_emp_rec;
if emp_cur%notfound then
...
Dies könnte ordentlicheres dann
begin
select e.* into l_emp_rec
from emp e
where e.empno = p_empno;
....
exception
when no_data_found then
...
Apart von etwas anderem, was andere Teile unseres Programms könnten no_data_found
schleudern?
Der andere Fall ist, wenn wir Bulk-Sammlung mit der LIMIT-Klausel (und mit ziemlicher Sicherheit wollen wir nutzen, um die LIMIT-Klausel, wenn wir Bulk-Sammlung zu tun) verwenden möchten. So
Explizite Cursor führen Overhead in unseren Code ein, so dass sie als klobig und ineffizient wahrgenommen werden. Aber das ist nicht immer der Fall. Wenn wir eine Bulk-Collect-Anweisung mit einem impliziten Cursor codieren, optimiert Oracle dies, um eine LIMIT-Klausel mit einem Wert von 100 zu verwenden. Das ist kein schlechter Standard, aber wahrscheinlich können wir mit einem höheren Wert 1000, 5000 bessere Leistung erzielen , sogar 10000. Die Kontrolle, die wir über den LIMIT-Wert erhalten, macht es also sinnvoll, den expliziten Cursor zu verwenden.
Kurz gesagt, sollten wir implizite Cursor verwenden, wenn wir glücklich sind, lassen Oracle Kontrolle Entscheidungen treffen (das ist ein großer Teil der Zeit ist, Oracle ziemlich smart). Aber wir sollten explizite Cursor verwenden, wenn wir Kontrolle über das Verhalten unseres Programms ausüben müssen.
Ich bin bei dir hier - ich verwende fast immer explizite Cursor (das einzige Mal, wenn ich nicht bin, wenn ich den Code eines anderen aktualisiere und ich möchte einen konsistenten Stil beibehalten). Mir war jedoch nicht bewusst, dass Sie eine LIMIT-Klausel nur für einen expliziten Cursor verwenden können. Ich habe viele Beispiele gesehen, die * ein * LIMIT benutzen - meinst du, das Limit wird zugunsten des Default-Wertes ignoriert? –
Sie erwähnte nicht explizit eine sehr praktische [rowtype] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CIHHHGAE) -Attribut, die nur mit explizitem Cursor verwendet werden können, . I.e. 'l_emp_rec emp_cur% rowtype;'. – user272735
- 1. Praktische Beispiele für Idris
- 2. Praktische Beispiele für NLTK Verwendung
- 3. Beispiele für die praktische Verwendung von JSON zu und von einem ASMX-Webservice über jQuery
- 4. Beispiele für die Verwendung von Lisp-Makros für
- 5. Wo finden Sie praktische, gut gestaltete Beispiele für Datenbankschemas, von denen Sie lernen können?
- 6. Beispiele für die Stärken von NodeJS
- 7. Beispiele für die Implementierung von Abfrageobjekten
- 8. Praktische Anwendungsfälle für ConcurrentHashMap
- 9. Praktische Aufgaben für Studenten, die Entwurfsmuster lernen
- 10. Praktische Anwendung von Bash-Array
- 11. Praktische Verwendung für Dispatcher.DisableProcessing?
- 12. Java: praktische Anwendungsfälle für die Serialisierung von Singletons?
- 13. Explizite Instanziierung des Vorlagenkonstruktors für die Vorlagenklasse
- 14. Praktische Anwendung von System.WeakReference
- 15. Praktische Verwendung von Ausdrucksbäumen
- 16. "Einschränkungen für explizite Schnittstellenimplementierung ..."
- 17. Praktische Anwendungen von TypedReference
- 18. Real-World-Beispiele für verschachtelte Funktionen
- 19. Open-Source-Beispiele für gut gestaltete Anwendungen
- 20. Beispiele für den praktischen Einsatz von Boost :: MPL?
- 21. Sqlprofiler für Orakel
- 22. jQuery .each() - Praktische Anwendungen?
- 23. Redux: Meinungen/Beispiele für die Backend-Persistenz?
- 24. Echte Beispiele für Reflection
- 25. Beispiele für Winsock?
- 26. Praktische Verwendung von `Stackalloc` Schlüsselwort
- 27. Beispiele für ipython-Backends in anderen Sprachen?
- 28. Beispiele für Kontextmenüs, die keinen Rechtsklick erfordern
- 29. Beispiele für -webkit -Erscheinungseinstellungen
- 30. Beispiele für Robotium
[ 'wo aktuelle von'] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#CIHHIIID) -Klausel erfordert einen expliziten Cursor. – user272735