Wybieranie rekordu z widoku lub wywołanie procedury

Wybieranie rekordu z widoku lub wywołanie procedury
B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
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:

Kopiuj
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.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.