Es una pregunta interesante, para estar seguro. La mayoría de las personas que están familiarizadas con el desarrollo de Oracle no lo pensarían, pero a fin de cuentas, a veces es confuso definir la demarcación entre SQL y PL / SQL.
Al observar la definición de las siglas, comienza a tener una idea de qué áreas de funcionalidad cubre cada una:
SQL: lenguaje de consulta estructurado
PL / SQL: lenguaje de procedimiento / lenguaje de consulta estructurado
El lector observador podría notar cómo aparece SQL dos veces 8) Esto se debe a que SQL a menudo está incrustado en PL / SQL: PL / SQL es un lenguaje creado para proporcionar un lenguaje patentado de cuarta generación (4GL) que juega muy bien con objetos de base de datos en Oráculo.
Wikipedia tiene bastante buen material tanto en SQL como en PL / SQL
La parte confusa es donde PL / SQL y SQL se superponen un poco. El alcance de SQL incluye la inserción, consulta, actualización y eliminación de datos, el llamado DML, o las operaciones del lenguaje de manipulación de datos, pero también incluye crear, alterar, renombrar, soltar, que son DDL o las operaciones del lenguaje de definición de datos. Es aquí donde algunos pueden confundirse. La operación para crear un procedimiento almacenado, algo escrito usando PL / SQL, es en realidad SQL: usted usa SQL para crear el objeto de base de datos que representa un bloque de PL / SQL.
Del mismo modo, puede incrustar código SQL dentro de su PL / SQL. Un bucle FOR en PL / SQL puede basarse en una consulta SQL, por ejemplo. Sopla tu mente un poco, ¿eh? Crea un procedimiento usando SQL que en realidad usa SQL internamente para realizar alguna acción en los registros de la base de datos.
Cosas geniales si me preguntas.
v$sql
etc.Si está envuelto en
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Entonces es PL / SQL. ¿Qué significa esto debajo del capó? SQL se "compila" en un plan de consulta y se ejecuta, devolviendo inmediatamente un conjunto de resultados en el caso de
SELECT
o el número de filas afectadas en otros casos, o un error. PL / SQL, sin embargo, está más involucrado. Cada objeto al que se hace referencia se verifica su existencia y las concesiones necesarias, luego el PL / SQL se compila en un código casi nativo , que se ejecuta a toda velocidad. Las dependencias se rastrean y si una tabla cambia, entonces cualquier referencia de PL / SQL requiere una nueva compilación. La razón de esto es la velocidad; Como todo se hace por adelantado en tiempo de compilación, no es necesario realizar ninguna verificación de tiempo de ejecución en PL / SQL, mientras que las declaraciones SQL deben verificarse cada vez (incluso si los planes de consulta se almacenan en caché, el llamado análisis suave, los privilegios aún deben verificarse e incluso un análisis suave tiene un costo asociado).Esta es una de las "ventajas asesinas" de los procedimientos almacenados como lo hace Oracle; En realidad, ejecutar un proceso almacenado PL / SQL o un disparador hace la cantidad mínima absoluta de cálculo para obtener el resultado. El código de la aplicación que se ejecuta fuera del núcleo de Oracle, donde no es de confianza, tiene que saltar a través de más aros para obtener los datos. Es el mismo argumento para lenguajes de alto nivel fuertemente tipados y referencialmente transparentes como OCaml o Haskell: haga más trabajo una vez, en tiempo de compilación, y obtenga los beneficios en los millones de veces que se ejecuta el código.
fuente
SQL es un estándar *.
PL / SQL es una extensión de proveedor para el estándar SQL *.
* SQL es un lenguaje que tiene una gramática explícita y reglas sobre cómo se debe implementar esa gramática, y
no esun estándarper se.Sin embargo,dado que hay una especificación de lenguaje en la que todos pueden estar de acuerdo, cualquier cosa escrita en SQL sería portátil si el programa solo se escribiera en SQL.Pero debido a que PL / SQL es una extensión de proveedor, tendrá partes de lenguaje que otros proveedores pueden no admitir.
fuente