C'est une question intéressante, bien sûr. La plupart des gens qui connaissent le développement Oracle n'y penseraient pas, mais quand vous y arrivez, il est parfois déroutant de définir la démarcation entre SQL et PL / SQL.
En regardant la définition des acronymes, vous commencez à vous faire une idée des domaines de fonctionnalité que chacun couvre:
SQL - Langage de requête structuré
PL / SQL - Langage procédural / Langage de requête structuré
Le lecteur attentif remarquera peut-être comment SQL apparaît deux fois 8) En effet, SQL est souvent intégré à PL / SQL - PL / SQL est un langage conçu pour fournir un langage propriétaire de 4e génération (4GL) qui fonctionne très bien avec les objets de base de données dans Oracle.
Wikipédia a du bon matériel sur SQL et PL / SQL
La partie déroutante est où PL / SQL et SQL se chevauchent un peu. La compétence de SQL comprend l'insertion, la requête, la mise à jour et la suppression de données, ce qu'on appelle le DML ou les opérations du langage de manipulation de données, mais il comprend également la création, la modification, le renommage, la suppression qui sont des opérations de langage DDL ou de définition de données. C'est ici que certains pourraient être confus. L'opération pour créer une procédure stockée, quelque chose écrite en utilisant PL / SQL, est en fait SQL - vous utilisez SQL pour créer l'objet de base de données qui représente un bloc de PL / SQL.
De même, vous pouvez intégrer du code SQL dans votre PL / SQL. Une boucle FOR en PL / SQL peut être basée sur une requête SQL, par exemple. Ça vous souffle un peu, hein? Vous créez une procédure à l'aide de SQL qui utilise réellement en interne SQL pour effectuer une action sur les enregistrements de la base de données.
Des trucs sympas si vous me demandez.
v$sql
etc.S'il est enveloppé dans
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Ensuite, c'est PL / SQL. Qu'est-ce que cela signifie sous le capot? SQL est "compilé" dans un plan de requête et exécuté, renvoyant immédiatement un jeu de résultats en cas de
SELECT
ou le nombre de lignes affectées dans d'autres cas, ou une erreur. PL / SQL est cependant plus impliqué. Chaque objet référencé est vérifié pour l'existence et les autorisations nécessaires, puis le PL / SQL est compilé en code quasi natif , qui s'exécute à pleine vitesse. Les dépendances sont suivies et si une table change, alors tout PL / SQL y faisant référence nécessite une recompilation. La raison en est la vitesse; comme tout est fait à l'avance au moment de la compilation, il n'est pas nécessaire d'avoir des vérifications d'exécution en PL / SQL, tandis que les instructions SQL doivent être vérifiées à chaque fois (même les plans de requête sont mis en cache, ce qu'on appelle l'analyse syntaxique douce, les privilèges doivent encore être vérifiés, et même une analyse souple a un coût associé).C'est l'un des "avantages les plus importants" des procédures stockées comme Oracle le fait; l'exécution d'un proc ou d'un déclencheur stocké PL / SQL fait le minimum absolu de calcul pour obtenir le résultat. Le code d'application s'exécutant en dehors du noyau Oracle où il n'est pas approuvé doit passer par plus de cerceaux pour accéder aux données. C'est le même argument pour les langages de haut niveau fortement typés et référentiellement transparents tels que OCaml ou Haskell - faites plus de travail une fois, au moment de la compilation, et profitez des millions de fois que le code est exécuté.
la source
SQL est un standard *.
PL / SQL est une extension du fournisseur de la norme SQL *.
* SQL est un langage qui a une grammaire explicite et des règles sur la façon dont cette grammaire doit être implémentée, et ce
n'est pasun standard ensoi.Cependant,comme il existe une spécification de langage sur laquelle tout le monde peut s'entendre, tout ce qui est écrit en SQL serait portable si le programme n'était écrit qu'en SQL.Mais comme PL / SQL est une extension de fournisseur, elle comportera des parties de langage que d'autres fournisseurs pourraient ne pas prendre en charge.
la source