Ошибка скрипта отмены сводки таблиц

У меня есть таблица с именем rp_resolution_master.

CREATE TABLE "REQUEST_PORTAL"."RP_RESOLUTION_MASTER" 
   ( "RM_ID" NUMBER, 
    "SR_ID" NUMBER, 
    "REQUEST_STATUS" VARCHAR2(200 BYTE), 
    "COMMENTS" VARCHAR2(4000 BYTE), 
    "UPDATED_ON" DATE, 
    "UPDATED_BY" VARCHAR2(500 BYTE), 
    "INTERNAL_COMMUNICATION" VARCHAR2(1 BYTE) DEFAULT 'N'
   );

Я запускаю запрос unpivot для этого.

 SELECT *
   From Rp_Resolution_Master
Unpivot INCLUDE NULLS ( 
          value For measures In ( rm_id, request_status, Comments
                                , updated_by, internal_communication)
                      ) 
 where sr_id = 1004707 
   And Updated_On = ( Select Max(Updated_On) 
                        From Rp_Resolution_Master 
                       Where Sr_Id = 1004707);

Но я получаю сообщение об ошибке

ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение 01790. 00000 - "выражение должно иметь тот же тип данных, что и соответствующее выражение" *Причина:
*Действие: Ошибка в строке: 3 Столбец: 51

Что я здесь делаю неправильно?


person Gautam Anand    schedule 15.11.2012    source источник
comment
Добро пожаловать в StackOverflow: если вы публикуете образцы кода, XML или данных, ПОЖАЛУЙСТА, выделите эти строки в текстовом редакторе и нажмите кнопку образцов кода ( { } ) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис. ! Если вы публикуете сообщения об ошибках, ПОЖАЛУЙСТА, используйте кавычки ( ` ` ), чтобы правильно отформатировать сообщение об ошибке.   -  person marc_s    schedule 15.11.2012


Ответы (1)


Проблема в том, что вы пытаетесь UNPIVOT столбцов с разными типами данных. Все несводные значения должны быть одинаковыми, как и при использовании запроса UNION или UNION ALL, каждое значение в столбцах должно иметь один и тот же тип данных.

Поскольку столбец RM_ID — это number, а остальные — varchar2, вам нужно будет использовать подзапрос, который выполняет cast() столбца RM_ID:

select *
from 
(
  SELECT cast(rm_id as varchar2(200)) rm_id,
    request_status,
    Comments,
    updated_by,
    internal_communication,
    Updated_On,
    sr_id
  From Rp_Resolution_Master
)
Unpivot INCLUDE NULLS ( 
          value For measures In ( rm_id, request_status, Comments
                                , updated_by, internal_communication)
                      ) 
where sr_id = 1004707 
  And Updated_On = ( Select Max(Updated_On) 
                     From Rp_Resolution_Master 
                     Where Sr_Id = 1004707);

См. SQL Fiddle с демонстрацией рабочего синтаксиса.

person Taryn    schedule 15.11.2012