2017-01-31 2 views
0

입니다. 원격 열 참조없이 ORA-22992 오류가 발생합니다.ORA-22992보기에서 원격 열을 생성하지 않습니다.

오류 : * ORA-22992 원격 테이블에서 선택 LOB 위치 지정자를 사용할 수 없습니다 " * 원인 : 원격 LOB 열을 참조 할 수 없습니다 조치 :. 원격 테이블에 LOB에 대한 참조를 제거

합니다. 나는 나의 다른 절, 그것은 잘 작동 제거하지만 다른 절은 원격 테이블 참조가없는

코드 오류 :..

create or replace view v_myview as 

select case 
     when exists (select count(routing_code), employee_id 
        from t_employee_logon 
        where routing_code = 'LOG-ON' 
        and employee_id = emp.id 
        group by employee_id 
        having count(routing_code) > 1) 
      then 'Logado em mais de um servidor' 
     else (select control_number 
       from t_employee_logon 
       where employee_id = loc.location_id 
       and wh_id = loc.wh_id 
       and routing_code = 'LOG-ON' 
       order by logon_start_date desc, logon_start_time desc 
       fetch first 1 row only) 
     end as servidor 
from t_location loc 
inner join t_employee emp 
    on loc.c1 = emp.id 
    and loc.wh_id = emp.wh_id 
inner join [email protected] dev 
    on dev.dev_name = emp.device 
inner join [email protected] dev2 
    on dev.link_device_id = dev2.device_id; 
오류없이

코드 :

create or replace view v_myview as 

select case 
     when exists (select count(routing_code), employee_id 
        from t_employee_logon 
        where routing_code = 'LOG-ON' 
        and employee_id = emp.id 
        group by employee_id 
        having count(routing_code) > 1) 
      then 'Logado em mais de um servidor' 
     else 'Hello World' 
     end as servidor 
from t_location loc 
inner join t_employee emp 
    on loc.c1 = emp.id 
    and loc.wh_id = emp.wh_id 
inner join [email protected] dev 
    on dev.dev_name = emp.device 
inner join [email protected] dev2 
    on dev.link_device_id = dev2.device_id; 
+0

무엇이 문제입니까? – mathguy

답변

0

내가으로이 글을 쓰는 것이 좋습니다 수 : 당신은 두 번 실행하지 않아도

입니다
select (select (case when count(el.routing_code) > 1 
        then 'Logado em mais de um servidor' 
        else cast(el.control_number as varchar2(255)) 
       end) 
     from t_employee_logon el 
     where el.routing_code = 'LOG-ON' and 
       el.employee_id = emp.id 
     ) as servidor 
. . . 

, 서브 쿼리에 case을 넣어. 아마 그것은 당신의 문제를 해결할 것입니다.

0

해결 방법은 case 문을 제거하고 내 선택 결과를 다른 선택으로 만듭니다.

select (columns_my_select) 
    , case_statement 
from (my_original_select_whithout_case); 


select column1 
    , column2 
    , case 
    when exists (select count(routing_code), employee_id 
       from t_employee_logon 
       where routing_code = 'LOG-ON' 
       and employee_id = usuario 
       group by employee_id 
       having count(routing_code) > 1) 
     then 'Logado em mais de um servidor' 
    else (select control_number 
      from t_employee_logon 
      where employee_id = usuario 
      and wh_id = cd 
      and routing_code = 'LOG-ON' 
      order by logon_start_date desc, logon_start_time desc 
      fetch first 1 row only) 
    end as servidor 
from (column1, column2 
    from t_location loc 
    inner join t_employee emp 
    on loc.c1 = emp.id 
    and loc.wh_id = emp.wh_id 
    inner join t_employee_logon empl 
    on empl.employee_id = emp.id 
    and empl.wh_id = emp.wh_id 
    inner join [email protected] dev 
    on dev.dev_name = emp.device 
    inner join [email protected] dev2 
    on dev.link_device_id = dev2.device_id) user_info 
group by usuario, cd, estoque_sto, estoque_hum, device, crf, controladora; 
관련 문제