Está en la página 1de 7

PL SQL ORACLE

1. ESTRUCTURA BASICA
Bloque no nombrado
[DECLARE]
Declaracin de sentencias
BEGIN
Ejecucion de sentencias
[EXCEPTION]
Declaracin de manejo de excepciones
END;
/
Bloque de Declaraciones.- Permite definir tipos de datos,
estructuras, y variables (nombre y tipo, valor).
Bloque e ejecucin.- Permiten procesa datos, puede contener:
asignacin de valores, comparaciones, operaciones condicionales
e iteraciones.
Bloque nombrado
FUNCTION function_name
[( parametro1
[IN][OUT] [NOCOPY]
tipo_dato_sql | tipo_dato_plsql
, parametro2
[IN][OUT] [NOCOPY]
tipo_dato_sql | tipo_dato_plsql
, parametro(n+1) [IN][OUT] [NOCOPY]
tipo_dato_sql | tipo_dato_plsql)]
RETURN [tipo_dato_sql | tipo_dato_plsql]
[ AUTHID {DEFINER | CURRENT_USER}]
[ DETERMINISTIC | PARALLEL_ENABLED ]
[ PIPELINED ]
[ RESULT_CACHE [RELIES ON table_name]]
IS
Declaracin de sentencias
BEGIN
Ejecucin de sentencias
[EXCEPTION]
Declaracin de manejo de excepciones
END;
/

2. ESTRUCTURA DE UN BLOQUE PLSQL


------Salida de mensaje
BEGIN
dbms_output.put_line('Hello World.');
END;
------ Con entrada de datos y mensaje e salida
DECLARE
my_var VARCHAR2(30);
BEGIN
my_var := '&input';
dbms_output.put_line('Hello '|| my_var );
END;
3. ESTRUCTURAS DE CONTROL
Sentencia IF
IF [NOT] left_operand1 = right_operand1 [[AND|OR]
[NOT] left_operand2 = right_operand2 [[AND|OR]
[NOT] boolean_operand ]] THEN
NULL;
ELSE
NULL;
END IF;
--------DECLARE
-- Define a Boolean variable.
my_var BOOLEAN;
BEGIN
-- Use an NVL function to substitute a value for
evaluation.
IF NOT NVL(my_var,FALSE) THEN
dbms_output.put_line('This should happen!');
ELSE
dbms_output.put_line('This can''t happen!');
END IF;
END;

Sentencia CASE

CASE [ TRUE | [selector_variable]]


WHEN [criterion1 | expression1] THEN
criterion1_statements;
WHEN [criterion2 | expression2] THEN
criterion2_statements;
WHEN [criterion(n+1) | expression(n+1)] THEN
criterion(n+1)_statements;
ELSE
block_statements;
END CASE
BEGIN
CASE TRUE
WHEN (1 > 3) THEN
dbms_output.put_line('One is greater than
three.');
WHEN (3 < 5) THEN
dbms_output.put_line('Three is less than
five.');
WHEN (1 = 2) THEN
dbms_output.put_line('One equals two.');
ELSE
dbms_output.put_line('Nothing worked.');
END CASE;
END;
4. BUCLES
Bucle FOR
FOR i IN starting_number..ending_number LOOP
statement;
END LOOP
BEGIN
FOR i IN 1..10 LOOP
dbms_output.put_line('The index value is ['||
i||']');
END LOOP;
END;

--------BEGIN
FOR i IN (SELECT nombre FROM rental.cliente c) LOOP
dbms_output.put_line('The title is ['||
i.nombre||']');
END LOOP;
END;
--------DECLARE
CURSOR c IS SELECT nombre FROM rental.cliente c;
BEGIN
FOR i IN c LOOP
dbms_output.put_line('The name is ['||
i.nombre||']');
END LOOP;
END;
Bucle simple
Bucles simples son estructuras explcitas. Requieren que a manejar tanto el ndice de
bucle y salida criterios. Tpicamente, los bucles simples se utilizan en combinacin con
instrucciones de cursor definidos localmente y cursores de referencia (REF CURSOR).
Oracle proporciona atributos de cursor que ayudan a administrar las actividades en los
bucles: %FOUND, %NOTFOUND, %ISOPEN, and %ROWCOUNT.

OPEN cursor_name [(parameter1,parameter(n+1))];


LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1
[,column_variable(n+1)];
EXIT WHEN cursor_name%NOTFOUND;
statement;
END LOOP;
CLOSE cursor_name;

DECLARE
name rental.cliente.nombre%TYPE;

CURSOR c IS SELECT nombre FROM rental.cliente c;


BEGIN
OPEN c;
LOOP FETCH c INTO name;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line('The name is ['||
name||']');
END LOOP;
CLOSE c;
END;
Bucle WHILE
OPEN cursor_name [(parameter1,parameter(n+1))];
WHILE condition LOOP
FETCH cursor_name
INTO row_structure_variable | column_variable1
[,column_variable(n+1)];
EXIT WHEN cursor_name%NOTFOUND;
statement;
END LOOP;
CLOSE cursor_name;
DECLARE
name rental.cliente.nombre%TYPE;
CURSOR c IS SELECT nombre FROM rental.cliente c;
BEGIN
OPEN c;
WHILE c%ISOPEN LOOP
FETCH c INTO name;
IF c%NOTFOUND THEN
CLOSE c;
END IF;
dbms_output.put_line('The name is ['||name||']');
END LOOP;
END;
5. TIPOS DE DATOS COMPUESTOS
Record - Registros
Un tipo de datos de registro es una estructura. Una estructura es una variable
compuesta que contiene una lista de variables que por lo general tienen nombres y
diferentes tipos de datos. Se define un tipo de datos de registro de forma implcita o
explcitamente. Hay restricciones en el uso de los registros de forma implcita
construidas. No se puede utilizar una forma implcita registro incorporado en una matriz.

DECLARE
TYPE demo_record_type IS RECORD
(id
NUMBER DEFAULT 1,
value VARCHAR2(10) := 'One');
demo DEMO_RECORD_TYPE;
BEGIN
dbms_output.put_line('['||demo.id||']['||
demo.value||']');
END;
---------DECLARE
TYPE full_name IS RECORD
(first VARCHAR2(10 CHAR) := 'John',
last VARCHAR2(10 CHAR) := 'Taylor');
TYPE demo_record_type IS RECORD
(id
NUMBER DEFAULT 1,
contact FULL_NAME);
demo DEMO_RECORD_TYPE;
BEGIN
dbms_output.put_line('['||demo.id||']');
dbms_output.put_line('['||demo.contact.first||']['||
demo.contact.last||']');
END;

Collections Colecciones
Las colecciones son matrices y listas. Las matrices se diferencian de las listas ya que
usan unos enumerados secuencialmente ndice, mientras que las listas utilizan un
ndice numrico o de cadena nica no secuencial. Las matrices estn densamente
pobladas listas porque han numerado secuencialmente ndices. Mientras que las listas
pueden tener densamente poblada ndices numricos, sino que tambin puede ser
escasamente pobladas. Escasamente pobladas medios existen lagunas en una
secuencia o que no son secuenciales.

DECLARE
TYPE number_table IS TABLE OF NUMBER;
list NUMBER_TABLE := number_table(1,2,3,4,5,6,7,8);
BEGIN
list.DELETE(2);
FOR i IN 1..list.COUNT LOOP
IF list.EXISTS(i) THEN
dbms_output.put('['||list(i)||']');
END IF;

END LOOP;
dbms_output.new_line;
END;

También podría gustarte