Исключение: ошибка произошла во время пакетирования: ORA-01427: однострочный подзапрос возвращает более одной строки - PullRequest
0 голосов
/ 30 апреля 2018
.
select
o.name as "Network Element Name",
(SELECT  CASE                 WHEN nt.OBJECT_TYPE_ID=8090328832013865599 /* RNC */ 
                              THEN           'RNC'
                              WHEN nt.OBJECT_TYPE_ID=8090328832013865600 /* Node B */ THEN
                               'Node B'
                              WHEN nt.OBJECT_TYPE_ID=5100558796013838330 /* BTS */ THEN
                               'BTS'
                               WHEN nt.OBJECT_TYPE_ID=5100558796013838331 /* BSC */THEN
                               'BSC'
                               END
            FROM nc_objects nt ,nc_references r 
           WHERE r.reference = nt.object_id)as "Network Element Type" from nc_objects o;

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

немного догадываюсь, но, возможно, это все, что вам нужно:

select nt.name as "Network Element Name"
     , case nt.object_type_id
          when 8090328832013865599 then 'RNC'
          when 8090328832013865600 then 'Node B'
          when 5100558796013838330 then 'BTS'
          when 5100558796013838331 then 'BSC'
       end as "Network Element Type"
from   nc_objects nt
       join nc_references r
            on r.reference = nt.object_id
from   nc_objects nt;

Исходная версия запрашивает nc_objects, и для каждой строки она пытается использовать объединение nc_objects и nc_references в скалярном подзапросе, что завершается ошибкой, так как находит более одной строки на nt object. Если вы просто хотите объединить эти две таблицы, то вам не нужен скалярный подзапрос ('select (select)'), так как вы можете просто присоединиться к ним, как указано выше.

Однако в запросе ничего не используется из nc_references, поэтому, возможно, вам вообще не нужно присоединяться, иначе какая-то логика отсутствует.

0 голосов
/ 30 апреля 2018

Ошибка указывает, что подзапрос возвращает более одного значения. Если вам нужно только вернуть значение, вы должны ограничить его, используя:

ROWNUM = 1

В противном случае проверьте соединение:

r.reference = nt.object_id

Пример:

select o.name as "Network Element Name",
(SELECT  CASE                 WHEN nt.OBJECT_TYPE_ID=8090328832013865599 /* RNC */ 
                              THEN           'RNC'
                              WHEN nt.OBJECT_TYPE_ID=8090328832013865600 /* Node B */ THEN
                               'Node B'
                              WHEN nt.OBJECT_TYPE_ID=5100558796013838330 /* BTS */ THEN
                               'BTS'
                               WHEN nt.OBJECT_TYPE_ID=5100558796013838331 /* BSC */THEN
                               'BSC'
                               END
            FROM nc_objects nt ,nc_references r 
           WHERE r.reference = nt.object_id
             and rownum = 1) as "Network Element Type" from nc_objects o;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...