Wybieranie rekordu z widoku lub wywołanie procedury

0

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.

  1. Czy widzicie gdzieś błąd w tym zapytaniu? Wydaje się bardzo proste...
  2. Czy przy każdym zapytaniu będzie wywoływana metoda get_car_color czy tylko w przypadku gdy c.color nie zostanie znaleziony?
  3. 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.

0

Get_car_color będzie wolane wtedy, kiedy c.color bedzie null
Co fo reszty to mie wiem czy ktokolwiek z taka ilascia informacji jest ci w stanie odpowiedziec

1 użytkowników online, w tym zalogowanych: 0, gości: 1