2017-01-31 3 views
0

Ich bekomme ORA-22992 Fehler ohne Remote-Spaltenreferenz.ORA-22992 ohne Remote-Spalte in Sicht erstellen

Fehler: * ORA-22992 nicht LOB Locators von entfernten Tabellen ausgewählt verwenden“ * Ursache: Ein Remote-LOB-Spalte kann nicht referenziert werden . Aktion: Entfernen Sie Verweise auf LOB in entfernten Tabellen

Wenn. ich entferne meine else-Klausel, es funktioniert jedoch die else-Klausel hat keinen Remote-Tabelle Bezug

Code mit Fehlern:..

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; 

-Code ohne Fehler:

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

Was ist die Frage? – mathguy

Antwort

0

Könnte Ich schlage vor, schreibe dies als:

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 
. . . 

Das heißt, legen Sie die case in der Unterabfrage, so dass Sie es nicht zweimal ausführen müssen. Vielleicht wird es dein Problem beheben.

0

Die Lösung war, die case-Anweisung zu entfernen und mein Select-Ergebnis in einem anderen Select zu setzen.

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; 
Verwandte Themen