Oracle Pivot и Pivot XML - ORA-00918: столбец определен неоднозначно - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь выполнить поворотную операцию. Pivot работает правильно. В случае, если я хотел передать запрос динамически вместо жестко закодированных значений. Согласно документации в используемом Pivot XML, но он выдает ошибку. Было бы полезно любое предложение,

Поворотная точка работает правильно:

select * from
(select  column_name from cols where table_name = 'EMPLOYEES') aa
pivot
(
max(aa.column_name)
for column_name in ('EMPLOYEE_ID', 'FIRST_NAME')
);

Поворотная XML ошибка выброса:

select * from
(select  column_name,  table_name from cols  where table_name = 'EMPLOYEES')
pivot xml
(
max(column_name)
for column_name in (select  column_name from cols where table_name = 'EMPLOYEES')
);

ORA-00918: column ambiguously defined
00918. 00000 -  "column ambiguously defined"
*Cause:    
*Action:

Пытался предоставить псевдонимы, но все равно это не помогло.

Есть ли у нас другой способ определить подзапрос в предложении IN

1 Ответ

1 голос
/ 29 мая 2020

Попытка использовать оператор PL / SQL, результат ожидаемый. Ниже приведен оператор PL / SQL,

declare 

v_Sql1 varchar(1000);
v_Sql2 varchar(1000);

begin

select  (LISTAGG(chr(39)||column_name||chr(39), ',') WITHIN GROUP (ORDER BY column_id)) into v_Sql1 from cols where table_name = 'EMPLOYEES'; 

v_Sql2:= 'select * from
(select  column_name from cols where table_name = ''EMPLOYEES'') 
pivot
(
max(column_name)
for column_name in (' || v_Sql1 || '))'; 

dbms_output.put_line(v_Sql1);
dbms_output.put_line(v_Sql2);

execute immediate v_Sql2;

end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...