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);
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);
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)
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.
'Jetzt funktioniert es nicht 'bedeutet was? Jeder Fehler oder Ergebnis nicht wie erwartet? Geben Sie einige Beispieldaten und das erwartete Ergebnis an. – Wanderer