ORACLE: à l'Aide d'expressions de table communes (Common Table Expressions) avec PL/SQL

Tout d'abord, mon parcours est dans SQL Server. À l'aide d'expressions de table communes (Common Table Expressions) est un jeu d'enfant et de le convertir à une procédure stockée avec des variables ne nécessite pas de modifications de la structure du SQL d'autres que de remplacer les valeurs saisies avec les noms de variable.

En Oracle PL/SQL cependant, il est d'une nature différente. Mes expressions de table communes beau travail en tant que droit SQL, mais une fois que j'ai essayer d'envelopper comme PL/SQL que je tombe sur une foule de questions. De ma compréhension, SÉLECTIONNEZ maintenant besoin d'une DANS laquelle seules les résultats d'un seul enregistrement. Cependant, je suis désireux de l'ensemble du jeu d'enregistrements de plusieurs valeurs.

Mes excuses si je suis absent de l'évidence ici. Je pense que 99% de mon problème est le changement de paradigme que je dois faire.

Donné l'exemple suivant:

NOTE: je me suis grandement sur la simplification du SQL ici. Je sais, l'exemple ci-dessous peut être réalisé en une seule instruction SQL. Le SQL est beaucoup plus complexe. C'est les bases, je suis à la recherche d'ici.

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;

Maintenant, si je veux faire cela en PL/SQL avec des variables qui sont passés dans ou prédéfinies sur le dessus, ce n'est pas une simple question de déclarer les variables, popping valeurs en eux, et à changer mes valeurs codées en dur dans des variables et de l'exécuter. NOTE: je sais que je peux simplement changer les valeurs codées en dur à des variables comme :Département :date de début, et le Type, mais encore une fois, je suis trop simplifier l'exemple.

Il y a trois questions, je suis confronté ici que je suis en train d'envelopper ma tête autour de:

1) Quelle serait la meilleure façon de réécrire ce à l'aide de PL/SQL avec les variables déclarées? Les expressions de table communes ont maintenant pour aller DANS quelque chose. Mais ensuite, j'ai fais affaire avec une ligne à la fois par opposition à l'ensemble de la table. Donc, CTE de 'A' est une seule ligne à la fois, et CTE B ne verrez que la ligne unique, par opposition à tous les résultats des données d'Un, etc. Je sais que je vais probablement avoir à utiliser les CURSEURS pour parcourir les dossiers, ce qui semble en quelque sorte plus compliquer ce.

2) La sortie a maintenant utiliser DBMS_OUTPUT. Pour plusieurs enregistrements, je vais devoir utiliser un CURSEUR avec FETCH (ou POUR...la BOUCLE). Oui?

3) Est ce qu'il y a un gros problème de performance avec ce vs droite SQL en ce qui concerne la vitesse et les ressources utilisées?

Merci d'avance et encore une fois, toutes mes excuses si je suis absent quelque chose de vraiment évident ici!

  • S'il vous plaît consulter par exemple pour stackoverflow.com/tags/plsql/info et de commencer la lecture de Steven Feuerstein du PL/SQL 101 de la série (vous trouverez les liens dans la balise wiki).
InformationsquelleAutor VermontCoder | 2014-11-12