2017-02-02 1 views
0

J'ai obtenu une solution de pivot dynamique à partir de ce post. Maintenant, je veux implémenter les instructions ci-dessous dans une procédure Oracle.Rotation dynamique dans oracle sql - Procédure

clear columns 
COLUMN temp_in_statement new_value str_in_statement 
SELECT DISTINCT 
LISTAGG('''' || myLetter || ''' AS ' || myLetter,',') 
    WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
FROM (SELECT DISTINCT myLetter FROM myTable); 
SELECT * FROM 
(SELECT myNumber, myLetter, myValue FROM myTable) 
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement)); 

Merci d'avance.

Répondre

2

Si vous avez une table que vous souhaitez insérer les résultats de pivot à chaque fois que vous appelez la procédure stockée, vous pouvez utiliser ceci:

CREATE OR REPLACE PROCEDURE dynamic_pivot 
AS 
    v_sql LONG  := NULL; 
    v_statement LONG := NULL; 
BEGIN 
    SELECT DISTINCT LISTAGG('''' 
    || myLetter 
    || ''' AS ' 
    || myLetter,',') WITHIN GROUP (
    ORDER BY myLetter) AS temp_in_statement 
    INTO v_statement 
    FROM 
    (SELECT DISTINCT myLetter FROM test_data 
    ); 
    v_sql := 'insert into pivot_table  
     select * from (SELECT myNumber, myLetter, myValue FROM test_data  
    )  
     PIVOT  
     (  
     SUM(myValue) AS val FOR myLetter IN (' || v_statement || ')  
    )'; 
    EXECUTE immediate v_sql; 
END; 
+0

Merci beaucoup .. Je l'ai mis en œuvre avec succès ce :) + 1vote pour la réponse rapide – Ram