SQL Programacion
SQL Programacion
BLOQUE PL/SQL
Ejemplos
-- Despliegue en pantalla de la frase SOY UN BLOQUE
SET SERVEROUT ON -- Permite el despliegue en pantalla
BEGIN
DBMS_OUTPUT.PUT_LINE(SOY UN BLOQUE);
END;
/
-- Mi primer bloque
DECLARE
-- Declara la variable v_date con tipo de dato DATE
v_date DATE;
BEGIN
-- Recupera la fecha corriente en la variable
SELECT CURRENT_DATE INTO v_date
FROM DUAL;
-- Despliega la fecha corriente en pantalla
DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_date,DD/MM/YYYY));
END;
/
BLOQUE PL/SQL
Ejemplos
-- Bloque con Excepcion
DECLARE
v_date VARCHAR2(10);
BEGIN
SELECT CURRENT_DATE INTO v_date
FROM DUAL;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_date,DD/MM/YYYY));
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(PROBLEMA);
END;
/
Variables
Las variables son regiones de memoria en un bloque PL/SQL que
requieren datos. Estas, se definen en la seccin de
DECLARACIN, donde son asignadas a un tipo especfico de dato
y en ocasiones inicializadas con algn valor.
Sintaxis:
nombre_variable [CONSTANT] TIPO [NOT NULL] [:= VALOR]
Ejemplos
CORRECTAS
VAR1 VARCHAR2(25);
VAR2 INTEGER := 8;
VAR3 DATE NOT NULL DEFAULT CURRENT_DATE;
INCORRECTAS
VAR1, VAR2 VARCHAR2(50);
VAR3 NUMBER NOT NULL;
n_valor NUMBER(9)
n_valor CHAR(11)
%TYPE
Si la variable que se declara se mapea directamente a una
columna de la base de datos, se puede anclar su tipo al tipo de
columna en la base de datos con %TYPE.
Ejemplo
-- Variable del tipo de la columna APELLIDO de la tabla
EMPLEADO de la BD.
VAR_APELLIDO EMPLEADO.APELLIDO%TYPE;
%ROWTYPE
Similar a %TYPE, solo que ste ancla la variable al tipo de datos
de todas las columnas de la tabla de la base de datos.
Ejemplo
-- Variable del tipo de la tabla DEPARTAMENTO de la BD
VAR_DEP DEPARTAMENTO%ROWTYPE;
Ejemplo
-- USANDO TYPE Y ROWTYPE
DECLARE
VAR_APELLIDO EMPLEADO.APELLIDO%TYPE;
VAR_DEP
DEPARTAMENTO%ROWTYPE;
BEGIN
SELECT APELLIDO INTO VAR_APELLIDO
FROM EMPLEADO
WHERE DEPTO_NO=66;
SELECT * INTO VAR_DEP
FROM DEPARTAMENTO
WHERE DEPTO_NO=66;
DBMS_OUTPUT.PUT_LINE( VAR_APELLIDO || ||
VAR_DEP.NOMBRE);
END;
/
Ejemplo
-- USANDO TYPE Y ROWTYPE (CON JOIN)
DECLARE
VAR_APELLIDO EMPLEADO.APELLIDO%TYPE;
VAR_DEP
DEPARTAMENTO%ROWTYPE;
BEGIN
SELECT APELLIDO,NOMBRE INTO
VAR_APELLIDO,VAR_DEP.NOMBRE
FROM EMPLEADO E,DEPARTAMENTO D
WHERE E.DEPTO_NO=D.DEPTO_NO
AND E.DEPTO_NO=66;
DBMS_OUTPUT.PUT_LINE( VAR_APELLIDO || ||
VAR_DEP.NOMBRE);
END;
/
IF CONDICION1 THEN
INSTRUCCIONES ;
[ELSEIF CONDICION2 THEN
INSTRUCCIONES];
[ELSE
INSTRUCCIONES];
END IF;
Ejemplo
-- SENTENCIA DE CONTROL
DECLARE
VAR_CONT NUMBER(3);
BEGIN
SELECT LENGTH(NOMM) INTO VAR_CONT
FROM MATERIA
WHERE CLAVE=S01;
IF VAR_CONT > 10 THEN
DBMS_OUTPUT.PUT_LINE(SOY MAYOR A 10);
ELSE
DBMS_OUTPUT.PUT_LINE(SOY MENOR A 10);
END IF;
END;
/
CICLOS LOOP/FOR/WHILE
Ciclo Numrico
(FOR)
LOOP
INSTRUCCIONES ;
EXIT WHEN
condicin
END LOOP;
FOR contador IN nmero_inicial ..
nmero_final LOOP
INSTRUCCIONES ;
END LOOP;
Ciclo
While
WHILE condicin
LOOP
INSTRUCCIONES
;
END LOOP;
Ejemplo
DECLARE
CONT NUMBER(2) := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE
(X= || CONT);
CONT := CONT + 1;
EXIT WHEN CONT = 21;
END LOOP;
END;
/
DECLARE
CONT NUMBER(2) ;
BEGIN
FOR CONT IN 1 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE
(X= || CONT);
END LOOP;
END;
/
DECLARE
CONT NUMBER(2) := 1;
BEGIN
WHILE CONT <=20 LOOP
DBMS_OUTPUT.PUT_LINE
(X= || CONT);
CONT := CONT + 1;
END LOOP;
END;
/