Как использовать декодирование в группе? - PullRequest
0 голосов
/ 03 февраля 2020

Я написал запрос следующим образом:

 select col1,
     col2,
     col3,
     col4,
     sum (col8) from my_table
     GROUP BY col1,
     col2,
     col3,
     col4,
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL3'), GROUP5,  jbbd_group_code_5,  GROUP4,  jbbd_group_code_4, GROUP3,  jbbd_group_code_3, GROUP2,  jbbd_group_code_2, GROUP1,  jbbd_group_code_1,
     jbbd_group_code_5),
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL2'), GROUP5,  jbbd_group_code_5,  GROUP4,  jbbd_group_code_4, GROUP3,  jbbd_group_code_3, GROUP2,  jbbd_group_code_2, GROUP1,  jbbd_group_code_1,
     jbbd_group_code_3),
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL1'), GROUP5,  jbbd_group_code_5,  GROUP4,  jbbd_group_code_4, GROUP3,  jbbd_group_code_3, GROUP2,  jbbd_group_code_2, GROUP1,  jbbd_group_code_1,
     jbbd_group_code_2);

Основная цель этого запроса - динамическое назначение группы на основе значения параметра контекста. Но это дает мне ошибку, показанную ниже.

ORA-00904: "GROUP1": неверный идентификатор

00000 - "% s: неверный идентификатор" * Причина:
* Действие: _Ошибка в строке: 85 Столбец: 175

Что может быть причиной этой проблемы и как это можно решить?

1 Ответ

0 голосов
/ 04 февраля 2020

Без этих таблиц я не могу проверить, есть ли другие проблемы, но вызов Sys_Context вернет строку, в тот момент, когда вы пытаетесь сравнить ее с объектом GROUP1 и т. Д.

Для декодирования для сравнения в виде строки необходимо заключить каждый в одинарные кавычки, как показано ниже.

select col1,
     col2,
     col3,
     col4,
     sum (col8) from my_table
     GROUP BY col1,
     col2,
     col3,
     col4,
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL3'), 'GROUP5',  jbbd_group_code_5,  'GROUP4',  jbbd_group_code_4, 'GROUP3',  jbbd_group_code_3, 'GROUP2',  jbbd_group_code_2, 'GROUP1',  jbbd_group_code_1,
     jbbd_group_code_5),
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL2'), 'GROUP5',  jbbd_group_code_5,  'GROUP4',  jbbd_group_code_4, 'GROUP3',  jbbd_group_code_3, 'GROUP2',  jbbd_group_code_2, 'GROUP1',  jbbd_group_code_1,
     jbbd_group_code_3),
     DECODE (  Sys_Context ('CMIC', 'P_GROUP_LEVEL1'), 'GROUP5',  jbbd_group_code_5,  'GROUP4',  jbbd_group_code_4, 'GROUP3',  jbbd_group_code_3, 'GROUP2',  jbbd_group_code_2, 'GROUP1',  jbbd_group_code_1,
     jbbd_group_code_2);
...