Comenzando con plsql

Hola Mundo

set serveroutput on

DECLARE
   message constant varchar2(32767):= 'Hello, World!';
BEGIN
   dbms_output.put_line(message);
END;
/

Se requiere el comando set serveroutput on en los clientes SQL*Plus y SQL Developer para habilitar la salida de dbms_output. Sin el comando no se muestra nada.

La línea end; señala el final del bloque PL/SQL anónimo. Para ejecutar el código desde la línea de comandos SQL, es posible que deba escribir / al comienzo de la primera línea en blanco después de la última línea del código. Cuando el código anterior se ejecuta en el símbolo del sistema SQL, produce el siguiente resultado:

Hello, World!

PL/SQL procedure successfully completed.

Definición de PLSQL

PL/SQL (Lenguaje de procedimiento/Lenguaje de consulta estructurado) es la extensión de procedimiento de Oracle Corporation para SQL y la base de datos relacional de Oracle. PL/SQL está disponible en Oracle Database (desde la versión 7), la base de datos en memoria TimesTen (desde la versión 11.2.1) e IBM DB2 (desde la versión 9.7).

La unidad básica en PL/SQL se denomina bloque, que se compone de tres partes: una parte declarativa, una parte ejecutable y una parte de creación de excepciones.

DECLARE
   <declarations section>
BEGIN
   <executable command(s)>
EXCEPTION
   <exception handling>
END;

Declaraciones: esta sección comienza con la palabra clave DECLARE. Es una sección opcional y define todas las variables, cursores, subprogramas y otros elementos que se utilizarán en el programa.

Comandos ejecutables: esta sección se incluye entre las palabras clave BEGIN y END y es una sección obligatoria. Consiste en las sentencias PL/SQL ejecutables del programa. Debe tener al menos una línea de código ejecutable, que puede ser simplemente un comando NULL para indicar que no se debe ejecutar nada.

Manejo de excepciones: esta sección comienza con la palabra clave EXCEPCIÓN. Esta sección es nuevamente opcional y contiene excepciones que manejan errores en el programa.

Cada declaración PL/SQL termina con un punto y coma (;). Los bloques PL/SQL se pueden anidar dentro de otros bloques PL/SQL usando BEGIN y END.

En el bloque anónimo, solo se requiere la parte ejecutable del bloque, otras partes no son necesarias. A continuación se muestra un ejemplo de código anónimo simple, que no hace nada más que funcionar sin informar de errores.

BEGIN
    NULL;
END;
/ 

La falta de instrucción ejecutable genera un error, porque PL/SQL no admite bloques vacíos. Por ejemplo, la ejecución del siguiente código genera un error:

BEGIN
END;
/ 

La aplicación generará un error:

END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge

Símbolo " * " en la línea debajo de la palabra clave “FIN;” significa que el bloque que termina con este bloque está vacío o mal construido. Cada bloque de ejecución necesita instrucciones para hacer, incluso si no hace nada, como en nuestro ejemplo.

Diferencia entre %TYPE y %ROWTYPE.

%TYPE: se usa para declarar un campo con el mismo tipo que el de la columna de una tabla específica.

DECLARE
        vEmployeeName   Employee.Name%TYPE;
BEGIN
        SELECT Name 
        INTO   vEmployeeName
        FROM   Employee
        WHERE  RowNum = 1;
        
        DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/

%ROWTYPE: se utiliza para declarar un registro con los mismos tipos que se encuentran en la tabla, vista o cursor especificado (= varias columnas).

DECLARE
        rEmployee     Employee%ROWTYPE;
BEGIN
        rEmployee.Name := 'Matt';
        rEmployee.Age := 31;
        
        DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
        DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/

Acerca de PLSQL

PL/SQL significa extensiones de lenguaje de procedimiento para SQL. PL/SQL está disponible solo como una “tecnología habilitadora” dentro de otros productos de software; no existe como un idioma independiente. Puede utilizar PL/SQL en la base de datos relacional de Oracle, en Oracle Server y en herramientas de desarrollo de aplicaciones del lado del cliente, como Oracle Forms. Estas son algunas de las formas en que puede usar PL/SQL:

  1. Para construir procedimientos almacenados. .
  2. Para crear disparadores de base de datos.
  3. Para implementar la lógica del lado del cliente en su aplicación Oracle Forms.
  4. Para vincular una página de inicio de World Wide Web a una base de datos de Oracle.

Crear o reemplazar una vista

En este ejemplo vamos a crear una vista.
Una vista se usa principalmente como una forma simple de obtener datos de varias tablas.

Ejemplo 1:
Ver con una selección en una tabla.

CREATE OR REPLACE VIEW LessonView AS
       SELECT     L.*
       FROM       Lesson L;

Ejemplo 2:
Ver con una selección en varias tablas.

CREATE OR REPLACE VIEW ClassRoomLessonView AS
       SELECT     C.Id, 
                  C.Name, 
                  L.Subject, 
                  L.Teacher 
       FROM       ClassRoom C, 
                  Lesson L 
       WHERE      C.Id = L.ClassRoomId;

Para llamar a estas vistas en una consulta, puede usar una declaración de selección.

SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;

Crear una tabla

A continuación vamos a crear una tabla con 3 columnas.
La columna Id debe llenarse, por lo que la definimos como NO NULO.
En la columna Contrato también agregamos una verificación para que el único valor permitido sea ‘Y’ o ‘N’. Si se completó una inserción y esta columna no se especifica durante la inserción, se inserta una ‘N’ por defecto.

CREATE TABLE Employee (
        Id            NUMBER NOT NULL,
        Name          VARCHAR2(60),
        Contract      CHAR DEFAULT 'N' NOT NULL,
        ---
        CONSTRAINT p_Id PRIMARY KEY(Id),
        CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);