Cześć, mam w bazie danych widok z rekordami, które są cyklicznie generowane.
Potrzebuję wyciągnąć informacje o danym aucie i mam dwie możliwości: albo wyciągnąć je z widoku, albo użyć procedur. Niestety przy dużej ilości aut procedury wpływają na strasznie długie wykonywanie zapytania.
Wymyśliłem sobie, żeby najpierw wyciągać dane z widoku, a jeżeli tam nie zostaną znalezione to dopiero wtedy wykonać procedury. Dodatkowo chciałbym to zrobić w ramach jednego zapytania (jednego hit'a do bazy).
Próbowałem:
SELECT COALESCE (c.color, get_car_color(1234)) AS color FROM cars c WHERE c.id = 1234 LIMIT 1;
gdzie cars to widok. O ile dla rekordów z widoku działa, to dla rekordów, których tam nie ma dostaję puste wyniki.
- Czy widzicie gdzieś błąd w tym zapytaniu? Wydaje się bardzo proste...
- Czy przy każdym zapytaniu będzie wywoływana metoda get_car_color czy tylko w przypadku gdy c.color nie zostanie znaleziony?
- Czy macie pomysł w jaki inny sposób rozwiązać ten problem?
EDIT: zapomniałem dodać, że do zapytania będą przekazywane id wybranych samochodów w postaci tablicy jednowymiarowej - czyli do where in wrzucam numery aut, a następnie wybieram ich dane tak jak opisałem powyżej.