Está en la página 1de 25

Deysi Marín Velásquez

dmarin1@usbcali.edu.co
Facultad de Ingeniera
Universidad San Buenaventura Cali
Tipos de datos nuevos
• %TYPE: si la variable que estamos declarando,
es igual a la de una columna de la base de
datos, se puede declarar de esta forma.
• Ejemplo:
DELCARE
v_last_name AUTHORS.LAST_NAME%TYPE;
Teniendo en cuenta que authors es el nombre de
la tabla y last_name, el nombre de la columna.
Tipos de datos nuevos
• %ROWTYPE: es similar a la anterior, con la
diferencia de que esta debe ser igual las
variables de una columna de la tabla no sólo a
una fila, suele utilizarse para cursores o records.
• Ejemplo:
DELCARE
v_author AUTHORS%ROWTYPE;
Operador de asignación
• La asignación de valores a las variables
declaradas en PL/SQL se realiza por medio del
operador :=.
• La asignación se puede realizar en sección de
declaración o en la sección de ejecución.
• Ejemplo1:
V_Price book.Price%TYPE := 0;
Operador de asignación
• Ejemplo2:
DECLARE
v_string varchar2(100);
BEGIN
v_string := 'CREATE TABLE authors(‘
|| 'id NUMBER PRIMARY KEY, ‘
|| 'first_name VARCHAR2(50), ‘
|| 'last_name VARCHAR2(50))';
EXECUTE IMMEDIATE (v_string);
END;
Condicionales
• IF-THEN: es la forma condicional más básica. Si
la condición no se cumple, entonces ignore lo
que sigue y continúe con el resto del programa.
IF condition
THEN
action;
END IF;
Condicionales
• Ejemplo:
DECLARE COMMIT;
v_count NUMBER(10) := 0; EXCEPTION
BEGIN WHEN OTHERS
SELECT count(1)
INTO v_count THEN
FROM authors DBMS_OUTPUT.PUT_
WHERE id = 54; LINE(SQLERRM);
END;
IF v_count = 0 /
THEN
INSERT INTO authors
VALUES (54, 'Randy', 'Stauffacher');
END IF;
Condicionales
• IF-THEN-ELSE: cuando la condición genera un
resultado de FALSE O NULL.
IF condition
THEN
action;
ELSE
action;
END IF;
Condicionales
• Ejemplo: ELSE
SET SERVEROUTPUT ON DBMS_OUTPUT.PUT_LINE('Auth
DECLARE or already exists');
v_count PLS_INTEGER := 0;
BEGIN END IF;
SELECT COUNT(1) COMMIT;
INTO v_count
EXCEPTION
FROM authors
WHERE id = 55; WHEN OTHERS
IF v_count = 0 THEN
THEN
INSERT INTO authors DBMS_OUTPUT.PUT_LINE(SQLE
VALUES (54, 'Roger', 'Wootten’); RRM);
DBMS_OUTPUT.PUT_LINE('Added END;
author');
/
Condicionales
• IF-THEN-ELSIF: se utiliza cuando se requieren múltiples
sentencias con el uso de IF, aún cuando esto no se
considera eficiente.
IF condition
THEN
action;
ELSIF condition
THEN
action
[ELSE
action]
END IF;
Condicionales
• Ejemplo: ELSIF v_num1 < v_num2
SET SERVEROUTPUT ON THEN
DECLARE
v_num1 NUMBER(10); DBMS_OUTPUT.put_line(‘v_num1
is NOT bigger than v_num2’);
v_num2 NUMBER(10);
BEGIN ELSE
v_num1 := 2; DBMS_OUTPUT.put_line('v_num1
v_num2 := 2; is EQUAL to v_num2’);
IF v_num1 > v_num2 END IF;
THEN
DBMS_OUTPUT.put_line('v_num1 is END;
bigger than v_num2'); /
Condicionales
• CASE:
CASE expression
WHEN test1 THEN action;
WHEN test2 THEN action;
...
END CASE;
Condicionales
• Ejemplo: CASE v_category
WHEN 'Oracle Basics’
SET SERVEROUTPUT ON
DECLARE THEN v_discount := .15;
v_category books.category%TYPE; WHEN 'Oracle Server’
v_discount NUMBER(10,2); THEN v_discount := .10;
v_isbn books.isbn%TYPE := '72230665';
BEGIN
END CASE;
SELECT category DBMS_OUTPUT.PUT_LINE('The
INTO v_category discount is ‘ ||v_discount*100 ||’
FROM books percent’);
WHERE isbn = v_isbn; …
-- Determine discount based on category
Condicionales
• Searched CASE : WHEN v_price > 50 THEN
v_price := v_price - (v_price * .10);

CASE -- Notice that there is no expression here...
WHEN v_price < 40 THEN UPDATE books
DBMS_OUTPUT.PUT_LINE('This book is SET price = v_price
already discounted');
WHEN v_price BETWEEN 40 AND 50 THEN WHERE isbn = v_isbn;
v_price := v_price - (v_price * .10); ELSE
DBMS_OUTPUT.PUT_LINE('Price
UPDATE books not found');
SET price = v_price
END CASE;
WHERE isbn = v_isbn;

Loops
• LOOP: es un ciclo infinito, si no se configura
bien, no es posible salir de él.

LOOP
action;
END LOOP;
Loops
• Ejemplo:
SET SERVEROUTPUT ON
DECLARE
v_count PLS_INTEGER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Ah -- Much better’);
v_count := v_count + 1;
EXIT WHEN v_count = 20;
END LOOP;
END;
/
Loops
• FOR LOOP: tiene un número predefinido de
iteraciones estipuladas en la sintaxis.

FOR counter IN low_number .. high_number


LOOP
action;
END LOOP;
Loops
•Ejemplo:
SET SERVEROUTPUT ON
BEGIN
FOR v_count IN 1 .. 20
LOOP
DBMS_OUTPUT.PUT_LINE('Iteration: '||v_count);
END LOOP;
END;
/
Loops
• WHILE LOOP: se ejecuta mientras la expresión
escrita se evalue como verdadera.

WHILE condition
LOOP
action;
END LOOP;
Loops
• Ejemplo:
SET SERVEROUTPUT ON
DECLARE
v_count PLS_INTEGER := 1;
BEGIN
WHILE v_count <= 20
LOOP
DBMS_OUTPUT.PUT_LINE('While loop iteration: '||v_count);
v_count := v_count + 1;
END LOOP;
END;
/
Labels
• Las etiquetas una forma de nombrar aquello a
lo que no se le puede asignar un nombre de
manera epecífica.
• Sus delimitadores son los paréntesis angulares.
<<esto_es_un_label>>
GOTO
• Es una habilidad de “saltar” en el programa.
• Su uso debe ser estrictamente necesario.
GOTO label_name;
• Reglas:
No puede referenciar una etiqueta en bloque
anidado.
GOTO
No puede ser llamado por fuera de una cláusula
IF, haciendo referencia a una etiqueta dentro del
IF.
No puede ser llamado dentro de un IF, si la
etiqueta está dentro de otro IF.
No puede navegar desde la sección de
excepciones a ninguna otra sección del bloque.
GOTO
• Ejemplo:
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE('BEGINNING OF BLOCK’);
GOTO l_Last_Line;
DBMS_OUTPUT.PUT_LINE('GOTO didn''t work!’);
RETURN;
<<l_Last_Line>>
DBMS_OUTPUT.PUT_LINE('Last Line');
END;
/
Bibliografía
• S. Urman, R. Hardman y M. McLaughlin,
PL/SQL Programming, New York: Oracle Press
- McGraw Hill, 2004.
• S. Feuerstein y B. Pribyl, Orable PL/SQL,
California: O'Reilly media, 2014.

También podría gustarte