Funckaj procedura widok - różnice

1

Ok, wiem co to procedura, że jest szybsza niż to samo polecenie SQL, że można dać userowi uprawnienia do jej wykonania itd.
Ale za chiny nie mogę zrozumieć czym różni się od niej funkcja.

Dodatkowo jest jeszcze widok.
Kiedy stosować widok a kiedy np funkcję zwracającą odpowiedni wynik?

Błagam niech mi to ktoś łopatologicznie jak dla debila wyjaśni.

1

Nie podałeś dokładnie, o jakiej bazie mowa - napiszę, jak to jest w Oracle, w innych jest najprawdopodobniej (prawie) tak samo.
Przede wszystkim musisz zwrócić uwagę na różnicę między SQL a PL/SQL (czy T-SQL lub być może inne w innych bazach).

http://stackoverflow.com/questions/1043265/what-is-the-difference-between-sql-pl-sql-and-t-sql

Procedura nie jest szybsza niż polecenie SQL, jest czymś innym (de facto napisanym w innym języku), chociaż może używać wstawek SQL. Podstawowe różnice między procedurą a funkcją:

  • procedura nic nie zwraca (chociaż może mieć parametry OUT, ale nie ma w niej żadnego "return", po prostu wykonuje pewne operacje i się kończy),
  • funkcji możesz użyć z poziomu SQLa, procedury nie.

Czyli w maksymalnym uproszczeniu: funkcji używasz, jeśli chcesz dostać jakiś wynik na podstawie parametrów (i nie modyfikować nic na bazie), procedury, jeśli chcesz wykonać jakąś operację na bazie (wygenerować jakiś raport, coś zalogować itd.)

Bazaman napisał(a):

Kiedy stosować widok a kiedy np funkcję zwracającą odpowiedni wynik?

W skrócie - jeżeli chcesz wydobyć jakieś dane z bazy, jeśli to tylko możliwe, używaj widoku (czyli SQLa). Jeżeli napiszesz funkcję, w środku niej i tak będziesz miał wstawkę SQL, a przełączanie SQL->PL/SQL->SQL jest kosztowne i należy go unikać jeśli to możliwe.

1

W TSQL:

  1. Procedura może zwrócić wynik zapytania, czyli bardzo dużo wartości i niezależnie od niego jeszcze np. jakiś kod wyjściowy. A do tego może mieć parametry typu out, więc może coś zwrócić jeszcze przez nie. Funkcja zwraca jedną wartość (skalar albo tabelę).
  2. W procedurze można używać transakcji.
  3. Funkcję można wywoływać z procedury, ale nie odwrotnie.
  4. Procedura nie może być używana w select ani where.
  5. W procedurze można używać bloków try-catch.

Ogólnie procedura to takie skompilowane po stronie serwera zapytanie SQL, które może wykonywać wiele operacji, realizować jakiś proces biznesowy. A funkcja pełni rolę pomocniczą, po prostu oblicza coś i zwraca wynik.

Widok natomiast to taka wirtualna tabela, w której definiuje się które kolumny, z których tabel i które dane ma zawierać. Po stronie aplikacji można z niej odczytywać dane jak z normalnych tabel, ale oczywiście nie można nic zapisywać.

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