Implémenter des tableaux croisés dynamiques dans Oracle SQL sans modification manuelle
Dans Oracle SQL, l'opérateur PIVOT permet aux utilisateurs de convertir des lignes en colonnes. Cependant, la syntaxe PIVOT standard oblige l'utilisateur à spécifier une liste statique de valeurs dans l'instruction IN. Cela peut poser des problèmes lorsque les valeurs changent fréquemment, car cela nécessite une maintenance manuelle de la requête.
Pour résoudre ce problème, vous pouvez utiliser des fonctions et la concaténation de chaînes pour créer des tableaux croisés dynamiques.
Utiliser des fonctions pour la saisie dynamique
Une façon consiste à utiliser une fonction pour générer une chaîne de valeur à utiliser dans l'instruction IN. Par exemple :
<code class="language-sql">CREATE FUNCTION GetDynamicPivotInString(table_name VARCHAR2, column_name VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN '''' || ( SELECT LISTAGG('''' || value || '''', ',') WITHIN GROUP (ORDER BY value) FROM (SELECT DISTINCT value FROM table_name ORDER BY value) ) || ''''; END;</code>
Cette fonction accepte deux paramètres : le nom de la table et le nom de la colonne à faire pivoter. Il renvoie une chaîne de valeurs concaténées par des virgules.
Valeur de la chaîne de connexion
Une alternative consiste à concaténer la chaîne de valeur directement dans l'instruction PIVOT à l'aide de l'opérateur NEW_VALUE :
<code class="language-sql">COLUMN temp_in_statement NEW_VALUE STRING; SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter, ',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM myTable; SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&temp_in_statement));</code>
Cette approche garantit que l'instruction PIVOT utilise toujours la dernière valeur dans la colonne spécifiée.
Limitations
Les deux méthodes ont des limites. L’utilisation de fonctions nécessite une maintenance supplémentaire du code. La méthode de concaténation est limitée par la taille de la chaîne pouvant être concaténée, qui est de 4 000 octets par défaut. Cependant, ces méthodes offrent de la flexibilité et ne nécessitent aucune intervention manuelle lorsque les données ou les valeurs pivots changent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!