Это интересный вопрос, чтобы быть уверенным. Большинство людей, знакомых с разработкой Oracle, не подумают об этом, но когда вы подойдете к этому, иногда сложно определить разграничение между SQL и PL / SQL.
Посмотрев на определение акронимов, вы начнете понимать, какие области функциональности охватывает каждая из них:
SQL - язык структурированных запросов
PL / SQL - процедурный язык / язык структурированных запросов
Внимательный читатель может заметить, как SQL отображается дважды. 8) Это потому, что SQL часто внедряется в PL / SQL - PL / SQL - это язык, созданный для обеспечения проприетарного языка 4-го поколения (4GL). который очень хорошо работает с объектами базы данных в Oracle.
В Википедии есть довольно хороший материал как по SQL, так и по PL / SQL.
Запутанная часть - это то, где PL / SQL и SQL немного перекрываются. Сфера действия SQL включает вставку данных, запрос, обновление и удаление, так называемые операции языка DML или языка манипулирования данными, но также включает операции создания, изменения, переименования, удаления, которые являются операциями языка DDL или языка определения данных. Здесь, где некоторые могут запутаться. Операция по созданию хранимой процедуры, написанной с использованием PL / SQL, на самом деле является SQL - вы используете SQL для создания объекта базы данных, представляющего блок PL / SQL.
Кроме того, вы можете встроить код SQL в ваш PL / SQL. Например, цикл FOR в PL / SQL может основываться на запросе SQL. Немного поражает, а? Вы создаете процедуру с использованием SQL, которая фактически использует SQL для выполнения некоторых действий с записями из базы данных.
Классные вещи, если вы спросите меня.
v$sql
и т. Д.Если он завернут в
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Тогда это PL / SQL. Что это значит под капотом? SQL «компилируется» в план запроса и выполняется, сразу же возвращая результирующий набор в случае
SELECT
или количества строк, затронутых в других случаях, или ошибки. PL / SQL, однако, является более сложным. Каждый объект, на который есть ссылки, проверяется на наличие и необходимые разрешения, затем PL / SQL компилируется в почти нативный код , который выполняется на полной скорости. Зависимости отслеживаются, и если таблица изменяется, то любая ссылка на PL / SQL, на которую она ссылается, требует перекомпиляции. Причиной этого является скорость; поскольку все выполняется во время компиляции, нет необходимости выполнять какие-либо проверки во время выполнения в PL / SQL, в то время как операторы SQL должны проверяться каждый раз (даже если планы запросов кэшируются, так называемые мягкий анализ), привилегии все еще должны быть проверены, и даже мягкий анализ имеет стоимость, связанную с этим).Это одно из «убийственных преимуществ» хранимых процедур по сравнению с Oracle; Фактически выполнение хранимого процесса или триггера PL / SQL выполняет абсолютный минимальный объем вычислений для получения результата. Код приложения, работающий вне ядра Oracle, где он не заслуживает доверия, должен пройти через несколько циклов, чтобы получить данные. Это тот же аргумент для строго типизированных, ссылочно-прозрачных языков высокого уровня, таких как OCaml или Haskell, - выполняйте больше работы один раз, во время компиляции, и получайте преимущества в миллионы раз, когда код выполняется.
источник
SQL - это стандарт *.
PL / SQL - это расширение поставщика к стандарту SQL *.
* SQL - это язык, который имеет явную грамматику и правила того, как эта грамматика должна быть реализована, и является,
но неявляется стандартнымper se.Однако,поскольку существует спецификация языка, с которой все могут согласиться, то все, что написано на SQL, будет переносимым, если программа будет написана только на SQL.Но поскольку PL / SQL является расширением поставщика, в нем будут языковые части, которые другие поставщики могут не поддерживать.
источник