ORACLE: Allgemeine Tabellenausdrücke Verwenden (Common Table Expressions) mit PL/SQL

First off, mein hintergrund ist in SQL Server. Allgemeine Tabellenausdrücke verwenden (Common Table Expressions) ist ein Kinderspiel und konvertieren Sie eine gespeicherte Prozedur mit Variablen erfordert keine änderungen an der Struktur der SQL-außer dem Ersatz eingegebenen Werte mit Variablen-Namen.

In Oracle PL/SQL-jedoch, es ist eine ganz andere Sache. Meine CTEs funktionieren, als gerade SQL, aber sobald ich versuche, Sie zu wickeln, Sie als PL/SQL-ich Laufe in einer Vielzahl von Bereichen. Von meinem Verständnis, ein WÄHLEN Sie benötigt nun ein, IN die nur die Ergebnisse einer einzigen Datensatz. Aber ich will das gesamte recordset mehrere Werte.

Meine Entschuldigungen wenn ich bin fehlen die hier offensichtlich. Ich denke, dass 99% von meinem problem, das ist der Paradigmenwechsel, die ich brauche zu stellen.

Gegeben das folgende Beispiel:

ANMERKUNG: ich habe mich sehr über die Vereinfachung der SQL hier. Ich weiß, das Beispiel weiter unten kann man in einer einzigen SQL-Anweisung. Die eigentliche SQL ist wesentlich komplexer. Es ist die Grundlagen, die ich Suche, hier.

WITH A as (SELECT * FROM EMPLOYEES WHERE DEPARTMENT = 200),

B as (SELECT * FROM A WHERE EMPLOYEE_START_DATE > date '2014-02-01'),

C as (SELECT * FROM B WHERE EMPLOYEE_TYPE = 'SALARY')

SELECT 'COUNTS' as Total,
(SELECT COUNT(*) FROM A) as 'DEPT_TOTAL',
(SELECT COUNT(*) FROM B) as 'NEW_EMPLOYEES',
(SELECT COUNT(*) FROM C) as 'NEW_SALARIED'
FROM A
WHERE rowcount = 1;

Nun, wenn ich das machen will, in PL/SQL mit Variablen, die übergeben werden oder der vordefinierte an der Spitze, es ist nicht einfach eine Frage der Deklaration der Variablen, knallen Werte in Ihnen, und die änderung meines hart codierte Werte in Variablen und es läuft. HINWEIS: ich weiß, dass ich kann, ändern Sie einfach die hart-kodierten Werten zu Variablen wie :Abteilung :StartDate, und :Geben, aber auch hier bin ich zu kurz gedacht die Beispiel.

Gibt es drei Probleme, ich bin vor hier, ich bin versucht zu wickeln meinem Kopf herum:

1) Was wäre der beste Weg, um diese umschreiben mit PL/SQL mit Variablen deklariert? Die CTEs nun INS etwas. Aber dann beschäftige ich mich mit einer Zeile zu einer Zeit, als im Gegensatz zu den gesamten Tisch. So CTE 'A' ist eine einzelne Zeile zu einem Zeitpunkt und CTE B sehen nur die einzelne Zeile-im Gegensatz zu allen die Daten und Ergebnisse von A, etc. Ich weiß, dass ich wahrscheinlich haben, um zu verwenden CURSOR zum Durchlaufen der Datensätze, die irgendwie scheint mehr kompliziert.

2) Der Ausgang wurde nun DBMS_OUTPUT verwenden. Für mehrere Platten, die ich verwenden müssen Sie einen CURSOR mit FETCH (oder einer FOR...LOOP). Ja?

3) Ist es zu einem großen performance-Problem mit diesem Vergleich direkt SQL in Bezug auf Geschwindigkeit und Ressourcen verwendet?

Dank im Voraus und nochmals, ich entschuldige mich, wenn mir etwas fehlt offensichtlich wirklich hier!

  • Bitte durchsuchen Sie z.B. auf stackoverflow.com/tags/plsql/info und mit dem Lesen beginnen zu Steven Feuersteins PL/SQL 101-Serie (Sie finden die links in der tag-wiki).
InformationsquelleAutor VermontCoder | 2014-11-12
Schreibe einen Kommentar