É uma pergunta interessante, com certeza. A maioria das pessoas que estão familiarizadas com o desenvolvimento do Oracle não pensou nisso, mas quando se trata disso, às vezes é confuso definir a demarcação entre SQL e PL / SQL.
Observando a definição dos acrônimos, você começa a ter uma idéia de quais áreas de funcionalidade cada uma abrange:
SQL - Linguagem de Consulta Estruturada
PL / SQL - Linguagem processual / linguagem de consulta estruturada
O leitor atento pode perceber como o SQL aparece duas vezes 8) Isso ocorre porque o SQL é frequentemente incorporado ao PL / SQL - PL / SQL é uma linguagem criada para fornecer uma linguagem de quarta geração proprietária (4GL) que funciona muito bem com objetos de banco de dados em Oráculo.
A Wikipedia possui um material muito bom em SQL e PL / SQL
A parte confusa é onde PL / SQL e SQL se sobrepõem um pouco. O alcance do SQL inclui inserção de dados, consulta, atualização e exclusão, as chamadas operações de linguagem de manipulação de dados ou DML, mas também inclui criar, alterar, renomear, eliminar, que são operações de linguagem de definição de dados ou DDL. É aqui que alguns podem ficar confusos. A operação para criar um procedimento armazenado, algo escrito usando PL / SQL, é realmente SQL - você usa SQL para criar o objeto de banco de dados que representa um bloco de PL / SQL.
Da mesma forma, você pode incorporar o código SQL dentro do seu PL / SQL. Um loop FOR no PL / SQL pode ser baseado em uma consulta SQL, por exemplo. Assopra sua mente um pouco, não é? Você cria um procedimento usando o SQL que realmente usa o SQL internamente para executar alguma ação nos registros do banco de dados.
Coisas legais se você me perguntar.
v$sql
etc.Se estiver envolto em
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Então é PL / SQL. O que isso significa sob o capô? O SQL é "compilado" em um plano de consulta e executado, retornando imediatamente um conjunto de resultados no evento
SELECT
ou no número de linhas afetadas em outros casos ou em um erro. No entanto, o PL / SQL está mais envolvido. Todos os objetos mencionados nele são verificados quanto à existência e concessões necessárias, e o PL / SQL é compilado até o código quase nativo , que é executado em velocidade máxima. As dependências são rastreadas e, se uma tabela for alterada, qualquer referência PL / SQL a ela requer recompilação. A razão para isso é a velocidade; como tudo é feito antecipadamente no momento da compilação, não há necessidade de realizar verificações de tempo de execução no PL / SQL, enquanto as instruções SQL devem ser verificadas sempre (mesmo que os planos de consulta sejam armazenados em cache, a chamada análise suave, os privilégios ainda devem ser verificados e até uma análise suave tem um custo associado a ela).Essa é uma das "principais vantagens" dos procedimentos armazenados, como a Oracle os faz; na verdade, executar um proc ou gatilho armazenado PL / SQL faz a quantidade mínima absoluta de cálculo para obter o resultado. O código do aplicativo executado fora do kernel do Oracle, onde não é confiável, precisa passar por mais obstáculos para obter os dados. É o mesmo argumento para linguagens de alto nível referenciadas e fortemente tipadas, como OCaml ou Haskell - trabalham mais uma vez, em tempo de compilação, e colhem os benefícios nos milhões de vezes que o código é executado.
fonte
SQL é um padrão *.
PL / SQL é uma extensão de fornecedor para o padrão SQL *.
* SQL é uma linguagem que possui uma gramática explícita e regras sobre como essa gramática deve ser implementada, e que
não é,por si só,um padrão .No entanto,como existe uma especificação de linguagem na qual todos podem concordar, qualquer coisa escrita em SQL seria portátil se o programa fosse escrito apenas em SQL.Porém, como o PL / SQL é uma extensão de fornecedor, ele terá partes de idioma que outros fornecedores podem não suportar.
fonte