Z pewnością jest to interesujące pytanie. Większość osób, które są zaznajomione z programowaniem Oracle, nie zastanawiałaby się nad tym, ale kiedy do tego dojdzie, definiowanie rozgraniczenia między SQL a PL / SQL może być mylące.
Patrząc na definicję akronimów, zaczynasz rozumieć, jakie obszary funkcjonalności obejmują:
SQL - Structured Query Language
PL / SQL - język proceduralny / język zapytań strukturalnych
Spostrzegawczy czytelnik może zauważyć, jak SQL wyświetla się dwa razy 8) To dlatego, że SQL jest często osadzony w PL / SQL - PL / SQL to język, który został stworzony, aby zapewnić zastrzeżony język 4. generacji (4GL), który bardzo dobrze gra z obiektami bazy danych w Wyrocznia.
Wikipedia ma całkiem niezły materiał na temat SQL i PL / SQL
Zagmatwane jest to, że PL / SQL i SQL nieco się pokrywają. Zadania SQL obejmują wstawianie danych, wysyłanie zapytań, aktualizację i usuwanie, tak zwane operacje języka DML lub operacje na języku manipulacji danymi, ale obejmują także tworzenie, zmianę, zmianę nazwy, upuszczanie, które są operacjami języka DDL lub języka definicji danych. To tutaj niektórzy mogą się pomylić. Operacja tworzenia procedury składowanej, coś napisanego przy użyciu PL / SQL, jest w rzeczywistości SQL - używasz SQL do utworzenia obiektu bazy danych, który reprezentuje blok PL / SQL.
Podobnie możesz osadzić kod SQL w swoim PL / SQL. Pętla FOR w PL / SQL może być oparta na przykład na zapytaniu SQL. Nieco zdmuchuje twój umysł, co? Procedurę tworzy się za pomocą SQL, który faktycznie wewnętrznie używa SQL do wykonania pewnych działań na rekordach z bazy danych.
Fajne rzeczy, jeśli mnie zapytasz.
v$sql
itp.Jeśli jest owinięty
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
To jest PL / SQL. Co to znaczy pod maską? SQL zostaje „skompilowany” do planu zapytań i wykonany, natychmiast zwraca zestaw wyników w przypadku
SELECT
lub liczby wierszy, których dotyczy w innych przypadkach, lub błędu. PL / SQL jest jednak bardziej zaangażowany. Każdy przywoływany w nim obiekt jest sprawdzany pod kątem istnienia i niezbędnych uprawnień, a następnie PL / SQL jest kompilowany do prawie natywnego kodu , który wykonuje się z pełną prędkością. Zależności są śledzone, a jeśli tabela się zmieni, to wszelkie odniesienia do niej PL / SQL wymagają ponownej kompilacji. Powodem tego jest prędkość; ponieważ wszystko jest wykonywane z góry w czasie kompilacji, nie ma potrzeby przeprowadzania żadnych kontroli w środowisku wykonawczym w PL / SQL, podczas gdy instrukcje SQL muszą być sprawdzane za każdym razem (nawet te plany zapytań są buforowane, tak zwana miękka analiza, uprawnienia muszą być nadal sprawdzane, a nawet delikatna analiza wiąże się z tym kosztem).Jest to jedna z „zabójczych zalet” procedur przechowywanych, podobnie jak Oracle; faktycznie wykonanie procedury lub wyzwalacza przechowywanego w PL / SQL wykonuje absolutnie minimalną ilość obliczeń, aby uzyskać wynik. Kod aplikacji działający poza jądrem Oracle, gdzie jest niezaufany, musi przeskakiwać przez więcej obręczy, aby uzyskać dostęp do danych. To ten sam argument za silnie typowymi, referencyjnie przejrzystymi językami wysokiego poziomu, takimi jak OCaml lub Haskell - wykonuj więcej pracy raz, w czasie kompilacji i czerp korzyści z miliona czasu wykonania kodu.
źródło
SQL jest standardem *.
PL / SQL jest rozszerzeniem dostawcy standardu SQL *.
* SQL jest językiem, który ma jawną gramatykę i zasady dotyczące sposobu, w jaki ta gramatyka powinna zostać zaimplementowana i jest,
ale niejest standardemper se.Ponieważ jednakistnieje specyfikacja językowa, na którą wszyscy mogą się zgodzić, wszystko napisane w SQL byłoby przenośne, gdyby program był napisany tylko w SQL.Ponieważ jednak PL / SQL jest rozszerzeniem dostawcy, będzie zawierał części językowe, których inni dostawcy mogą nie obsługiwać.
źródło