Ich habe eine Prozedur, die einen Eingabeparameter p_card_type hat. Basierend auf dem Eingabeparameter ändert sich die Where-Klausel. Hier ist ein wie die Abfrage aussieht. Ich habe 4 verschiedene Optionen und sie alle Fehler aus.Case verwenden Wenn in der Where-Klausel in Oracle
SELECT * FROM table WHERE CARD_TYPE in (p_card_type)
--Hier sind die 4 Optionen, die ich ausprobiert habe.
SELECT * FROM table WHERE
- Case p_card_type when 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- Case WHEN p_card_type = 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- CARD_TYPE in Case WHEN p_card_type = 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
- CARD_TYPE in Case p_card_type WHEN 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
Der Fehler, den ich bekommen ist ORA-06550: PL/SQL: ORA-00905: fehlende Stichwort ORA-06550: PL/SQL: SQL-Anweisung
ignoriertWürde schätzen wirklich jede Art von Hilfe darauf. Danke vielmals.
Vielen Dank, sowohl die Lösungen arbeiten . Betrachtet die Ausführungszeit für die beste Anpassung. – TheRaoMeister
Die Verbindung scheint unnötig zu sein - warum sollte die Basistabelle zweimal gescannt werden, wenn es in einem Durchgang möglich ist? Kombinieren Sie einfach die Where-Klauseln mit dem OR-Operator. – mathguy
@mathguy: Oracles Optimierer ist schlau genug, die Tabelle nicht zu scannen, wenn die Bedingung auf 'p_card_type' (der Eingabeparameter) ungültig ist. – Quassnoi