Eu sei que a pergunta pode parecer muito estúpida, mas nunca entendi essa parte.
O SQL*Plus funciona com SQL e PL/SQL. Como sei se algum código é SQL ou PL/SQL? Se meu código tiver um loop for, não é mais SQL?
PL/SQL é uma extensão para SQL ter loops, condicionais etc. Então qualquer código SQL é por padrão código PL/SQL? Não é assim?
Existe uma demarcação entre SQL e PL/SQL?
Dois exemplos de diferenciação b/w SQL e PL/SQL que desencadearam esta questão:
Qual é a diferença entre essas duas instruções create table?
https://stackoverflow.com/questions/2267386/oracle-11g-varray-of-objects/2267813#2267813
Se estiver embrulhado
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Então é PL/SQL. O que isso significa sob o capô? O SQL é "compilado" para um plano de consulta e executado, retornando imediatamente um conjunto de resultados em caso de
SELECT
ou o número de linhas afetadas em outros casos ou um erro. PL/SQL, entretanto, está mais envolvido. Cada objeto referenciado nele é verificado quanto à existência e às concessões necessárias, então o PL/SQL é compilado para um código quase nativo , que é executado em velocidade total. As dependências são rastreadas e, se uma tabela for alterada, qualquer referência PL/SQL a ela exigirá recompilação. A razão para isso é a velocidade; como tudo é feito antecipadamente em tempo de compilação, não há necessidade de nenhuma verificação de tempo de execução em PL/SQL, enquanto as instruções SQL devem ser verificadas todas as vezes (mesmo que os planos de consulta sejam armazenados em cache, a chamada análise suave, os privilégios ainda devem ser verificados e até mesmo uma análise suave tem um custo associado a ela).Esta é uma das "vantagens matadoras" dos procedimentos armazenados como o Oracle os faz; na verdade, a execução de um procedimento ou gatilho armazenado em PL/SQL faz a quantidade mínima absoluta de computação 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 fortemente tipadas e referencialmente transparentes, como OCaml ou Haskell - faça mais trabalho uma vez, em tempo de compilação, e colha os benefícios nos milhões de vezes que o código é executado.
É uma pergunta interessante, com certeza. A maioria das pessoas familiarizadas com o desenvolvimento do Oracle não pensaria nisso, mas quando você chega a isso, às vezes é confuso definir a demarcação entre SQL e PL/SQL.
Olhando para a definição das siglas, você começa a ter uma ideia de quais áreas de funcionalidade cada uma cobre:
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 geralmente é incorporado ao PL/SQL - PL/SQL é uma linguagem criada para fornecer uma linguagem proprietária de 4ª geração (4GL) que funciona muito bem com objetos de banco de dados em Oráculo.
A Wikipédia tem um material muito bom sobre SQL e PL/SQL
A parte confusa é onde PL/SQL e SQL se sobrepõem um pouco. A abrangência do SQL inclui inserção, consulta, atualização e exclusão de dados, as chamadas DML, ou operações de linguagem de manipulação de dados, mas também inclui criar, alterar, renomear, descartar, que são DDL ou operações de linguagem de definição de dados. É aqui que alguns podem ficar confusos. A operação para criar um procedimento armazenado, algo escrito usando PL/SQL, na verdade é 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 código SQL dentro de seu PL/SQL. Um loop FOR em PL/SQL pode ser baseado em uma consulta SQL, por exemplo. Explode sua mente um pouco, hein? Você cria um procedimento usando SQL que, na verdade, usa SQL internamente para executar alguma ação nos registros do banco de dados.
Coisas legais, se você me perguntar.
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 é ,
mas não éum padrãoper se.No entanto,como existe uma especificação de linguagem com a qual todos podem concordar, qualquer coisa escrita em SQL seria portátil se o programa fosse escrito apenas em SQL.Mas como o PL/SQL é uma extensão do fornecedor, ele terá partes de linguagem que outros fornecedores podem não suportar.