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

Ist die Verwendung eines SELECT innerhalb einer Pipeline-PL/SQL-Tabellenfunktion erlaubt?

  1. Normalerweise betreffen DML-Einschränkungen nur Modifikationsanweisungen (UPDATE, DELETE ...), daher sollte SELECT in Ordnung sein. Ich werde versuchen, eine bestimmte Aussage von Oracle zu finden.

  2. Ansichten wären Ihr erstes Tool, um häufig verwendete Abfragen zu modularisieren.

  3. Funktionen haben gegenüber Views einen Nachteil:Wenn sie von einem anderen SELECT aufgerufen werden, werden sie nicht zum gleichen Zeitpunkt wie das Haupt-SELECT ausgeführt. Jeder Aufruf einer SELECT-Anweisung ist konsistent, aber da die SELECT-Anweisungen im Funktionscode und nicht im Haupt-SQL enthalten sind, können Sie inkonsistente Ergebnisse zurückgeben. Dies ist bei Views und Sub-Select nicht möglich:Wenn eine große Anweisung eine View aufruft, wird die View zum gleichen Zeitpunkt wie die Hauptabfrage erstellt.

Aktualisieren :bezüglich Ihres Kommentars zu parametrisierten Abfragen

Sie können parametrisierte Ansichten erstellen, d. h. Ansichten, die von Variablen abhängen, die vor der Ausführung festgelegt wurden. Hier ist ein Beispiel für AskTom zeigt, wie Sie es mit userenv('client_info') machen könnten oder dbms_session.set_context .