2017-02-02 8 views
0

У меня есть решение для динамического поворота из этого post. Теперь я хочу реализовать приведенные ниже инструкции в процедуре оракула.Динамический стержень в оракуле sql - Процедура

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)); 

Заранее спасибо.

ответ

2

Если у вас есть таблица, который вы хотите вставить результаты Pivot каждый раз, когда вы называете ХП, вы можете использовать это:

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

Большое спасибо .. Я реализовал это успешно :) + 1vote для быстрого ответа – Ram