2016-07-14 11 views
0

Dies ist meine MySQL-Abfrage. Wie kann ich diese Abfrage in Oracle ausführen? Im Moment funktioniert es nicht.Hat Oracle eine äquivalente Funktion für mysql "FIELD"

SELECT * FROM mytable WHERE id IN (1,2,3,4) ORDER BY FIELD(id,3,2,1,4); 
+0

'Jetzt funktioniert es nicht 'bedeutet was? Jeder Fehler oder Ergebnis nicht wie erwartet? Geben Sie einige Beispieldaten und das erwartete Ergebnis an. – Wanderer

Antwort

1

Hier ist eine dumme Lösung: (:-D)

SELECT * FROM mytable WHERE id IN (1,2,3,4) 
ORDER BY CASE id WHEN 3 THEN 1 
       WHEN 2 THEN 2 
       WHEN 1 THEN 3 
       WHEN 4 THEN 4 END; 

Oder verwenden DECODE Funktion:

SELECT * FROM mytable WHERE id IN (1,2,3,4) 
ORDER BY DECODE(id, 3, 1, 2, 2, 1, 3, 4, 4, 0) 
0

Oracle Konstruktion nicht angemeldet hat stattdessen können Sie Ihre eigene Funktion erstellen

create TYPE T_VAR IS TABLE OF varchar2(4000); 
/

create or replace function FIELD(p_val varchar2, p_var t_var) return number is 
    begin 
     for i in 1..p_var.count 
     loop 
      if p_val = p_var(i) then 
      return i; 
      end if; 
     end loop; 

     return p_var.count + 1; 
end FIELD; 
/

Abfrage

SELECT t.* 
    FROM mytable t 
WHERE id IN (1, 2, 3, 4) 
order by FIELD(id,T_VAR(3,2,1,4)) 

Ein Hinweis. Sie sollten mit dieser Signatur FIELD (p_val number, p_var t_var) für die explizite Datentypkonversation ein weiteres FELD erstellen. Funktion vorher ist universell, kann aber Ursache für einige bizare Effekte sein.

Verwandte Themen