sábado, 13 de octubre de 2007

Cursores PL/SQL notación SELECT..INTO

Creamos un procedimiento almacenado PL/SQL o PL/SQL stored procedure de nombre SELECT_INTO. El procedimiento recupera una columna de una fila dada, lo muestra en pantalla con un mensaje y termina.

Líneas 1 a 2: Crean un procedimiento nuevo o lo reemplazan si ya existe uno anteriormente almacenado con el nombre SELECT_INTO.
Línea 3: Declara la variable vTEXT_LENGTH del mismo tipo de datos que la columna TEXT_LENGTH de la vista ALL_VIEWS.
Líneas 5 a 9: Declaran la sentencia SELECT que recupera la longitud del texto de la vista USER_TABLES y lo asigna a la variable vTEXT_LENGTH.
Líneas 11 y 12: Muestran en pantalla un mensaje y el valor recuperado por la sentencia SELECT.
SQL> CREATE OR REPLACE
2 PROCEDURE SELECT_INTO AS
3 vTEXT_LENGTH ALL_VIEWS.TEXT_LENGTH%TYPE;
4 BEGIN
5 SELECT TEXT_LENGTH
6 INTO vTEXT_LENGTH
7 FROM ALL_VIEWS
8 WHERE OWNER = 'SYS'
9 AND VIEW_NAME = 'USER_TABLES';
10
11 DBMS_OUTPUT.PUT_LINE('La longitud del texto de la vista es:');
12 DBMS_OUTPUT.PUT_LINE(vTEXT_LENGTH);
13
14 END SELECT_INTO;
15 /

Procedimiento creado.

SQL> DESCRIBE SELECT_INTO
PROCEDURE SELECT_INTO
Normalmente se encuentra deshabilitada la salida de mensajes por pantalla. Asignando el valor ON a la variable de ambiente SERVEROUTPUT, SQL*Plus muestra los mensajes de salida de los procedimientos almacenados.
SQL> SET SERVEROUTPUT ON
Ejecutamos el procedimiento con el comando EXECUTE.
SQL> EXECUTE SELECT_INTO
La longitud del texto de la vista es:
3971


Procedimiento PL/SQL terminado correctamente.

SQL>
Podemos leer este tema en la documentación estandar de Oracle:

Manual: Oracle Database PL/SQL User's Guide and Reference
Capítulo: 6 Performing SQL Operations from PL/SQL
Título: Querying Data with PL/SQL
Subtítulo:Selecting At Most One Row: SELECT INTO Statement

Entradas relacionadas:
PL/SQL Tutorial
Cursores PL/SQL notación SELECT..INTO
Cursores PL/SQL notación FOR...LOOP
Cursores PL/SQL notación CURSOR...FOR...LOOP
Cursores PL/SQL notación OPEN...FETCH...CLOSE
Cursores PL/SQL notación FETCH...BULK COLLECT INTO...