Я попытался создать свою собственную процедуру для динамического стержня, но он не работает. Моя процедура создана правильно, но когда я хочу ее выполнить, она не работает. Во-первых, я пробовал процедуру bluefeet и работал. ссылка на этот вопрос Dynamically pivoting a table OracleДинамическая сводная таблица - разработчик sql
Моя процедура должна учитывать количество значений из столбца p_key.
Возможно, у кого-то есть идея, почему моя процедура не работает.
код для моей таблицы
create table aa_tabela (
C_ID number(3,0),
gcm number(1,0),
p_key varchar2(30),
p_count number(6,0));
вставить несколько значений
INSERT ALL
INTO aa_tabela (C_ID, gcm, p_key, p_count)
VALUES (1, 7, 'Data Mining', 2)
INTO aa_tabela (C_ID, gcm, p_key, p_count)
VALUES (2, 5, 'Data Mining', 3)
INTO aa_tabela (C_ID, gcm, p_key, p_count)
VALUES (3, 3, 'Reporting', 1)
INTO aa_tabela (C_ID, gcm, p_key, p_count)
VALUES (4, 3, 'Olap', 5)
INTO aa_tabela (C_ID, gcm, p_key, p_count)
VALUES (5, 1, 'Reporting', 4)
SELECT * FROM dual;
Моей статическая таблица PIVOT является работой:
SELECT GCM,
SUM(case when p_key = 'Data Mining' then p_count end) AS Data_Mining,
SUM(case when p_key = 'Reporting' then p_count end) AS Reporting,
SUM(case when p_key = 'Olap' then p_count end) AS OLAP
from aa_tabela
group by gcm
order by gcm desc;
Результат:
|GCM | DATA_MINING | REPORTING | OLAP |
| 7 | 2 | | |
| 5 | 3 | | |
| 3 | | 1 | 5 |
| 1 | | 4 | |
Моя процедура динамического поворота создает правильно:
CREATE OR REPLACE procedure test_abc(p_cursor in out sys_refcursor)
AS
sql_query long := 'select gcm ';
BEGIN
for x in (select distinct p_key from aa_tabela order by 1)
loop
sql_query := sql_query ||
' , sum(case when p_key = '''||x.p_key||''' then p_count end) as '||x.p_key;
dbms_output.put_line(sql_query);
end loop;
sql_query := sql_query || ' from aa_tabela group by gcm';
open p_cursor for sql_query;
END;
/ ПРОЦЕДУРА TEST_ABC скомпилирован
Я исполняю свою процедуру следующим кодом:
variable x refcursor
exec test_abc(:x);
print x
Сообщение об ошибке:
Error starting at line : 215 in command -
exec test_abc(:x)
Error report -
ORA-00923: FROM keyword not found where expected
ORA-06512: at "MAGDA.TEST_ABC", line 16
ORA-06512: at line 1
00923. 00000 - "FROM keyword not found where expected"
Проверьте, что находится в переменной sql_query с помощью 'dbms_output.put_line', например - вы увидите какие-либо ошибки в вашем SQL. –