Saltar la navegación

2.6.- Sentencias SQL en programas PL/SQL

En un bloque PL/SQL, se utilizan sentencias SQL para recuperar y modificar los datos de tablas de una BD. 

Hasta ahora hemos trabajado con SQL de forma interactiva, escribíamos la sentencia y obteníamos los resultados en pantalla. Para trabajar con SQL dentro de un programa trabajaremos con SQL embebido o incrustado. Los datos devueltos de la consulta los guardaremos en variables y estructuras definidas en el lenguaje anfitrión, en nuestro caso PLSQL,  para utilizarlas como convenga. Para ello añadiremos alguna cláusula a la sentencia SELECT.

PL/SQL soporta el Lenguaje de Manipulación de Datos (DML) y los comandos de control de transacciones. Se pueden utilizar los comandos DML para modificar los datos de una tabla de Base de Datos. 

PL/SQL no soporta directamente el Lenguaje de Definición de Datos (DDL) como CREATE TABLEALTER TABLEDROP TABLE, etc... Lo cual no puede suceder si las aplicaciones tienen que crear objetos de Base de Datos en tiempo de ejecución mediante el paso de valores. Las sentencias DDL no pueden ser ejecutadas directamente. Estas instrucciones son sentencias dinámicas de SQL. Las sentencias dinámicas de SQLse construyen como cadenas de caracteres en tiempo de ejecución y pueden contener marcadores de posición para parámetros. Por lo tanto, puede utilizar SQL dinámico para ejecutar sus sentencias DDL en PL/SQL.

PL/SQL no soporta directamente las sentencias de Lenguaje de Control de Datos (DCL), tales como GRANT o REVOKE. Puede utilizar SQL dinámico para ejecutarlas.

Si queremos recuperar datos de la BD utilizaremos la  instrucción SELECT utilizaremos este formato. 

Sintaxis:

SELECT  lista_campos INTO {nombre_variable[, nombre_variable]...| nombre_registro}  
FROM tabla
[WHERE condición];

donde

- la lista_campos, contendrá al menos una columna y puede incluir expresiones SQL,  funciones de fila, o funciones de grupo.

- la cláusula INTO es obligatoria y se especifica entre  SELECT y cláusula FROM.

- nombre_variable, variable donde se guardará  el valor recuperado. Deben especificarse tantas variables como campos se indiquen en la lista de campos, debe haber correspondencia en posición y en tipo de datos.

- nombre_registro, un dato compuesto de PL/SQL donde se guardarán los valores recuperados

Las instrucciones SELECT  dentro de un programa PLSQL deben devolver una sola fila. Una consulta que devuelve más de una fila o ninguna fila genera un error de tipo, respectivamente TOO_MANY_ROWS o NO_DATA_FOUND. Si queremos recuperar más de una fila necesitaremos una estructura de datos llamada cursor que se verá más adelante.

Las instrucciones DML, INSERT, UPDATE y DELETE, se ejecutan utilizando la misma sintaxis que en SQL.