UNIDAD BSICA La estructura de un bloque PL/SQL es la siguiente: DECLARE /*Aqu es donde se declaran las variables*/ BEGIN /*Aqu va el cdigo del programa*/ EXCEPTION /*Manejo de errores*/ END;
2. OPERADORES. Operadores aritmticos. + Suma - Resta * Multiplicacin / Divisin ** Potencia Operadores Relacionales. Variable_1= variable_2 Variable_1< variable_2 Variable_1> variable_2 Variable_1 >= variable_2 Variable_1 <= variable_2 Variable_1 != variable_2 Otros operadores. := || igual menor mayor mayor o igual menor o igual distinto
3. VARIABLES Y TIPOS DE DATOS. Una variable tendr valor y existir dentro del bloque este declarada, fuera de dicho bloque no existir. Declaracin: Nombre tipo [(constant | not null), :=valor] Tipos: Vamos a ver los ms caractersticos. Numrico: number (entero,[decimal]) Caracter: varchar/varchar2(tamao), char(tamao) Fecha: date
Lgico: bolean Especificaciones de Tipo: <tabla>.<columna>%type Se utiliza para dar a una variable el tipo que tenga asignado una columna de la BD, independientemente de cmo est definido, es decir, tengo que definir una variable que va a almacenar un dato de una tabla, yo de esa tabla no s de qu tipo es ese dato, entonces pongo especificado: variable nombretabla.nombrecolumna%type Ms adelante veremos el rowtype, del cual diremos por ahora que almacena una fila completa de una tabla. Ya lo veremos mas adelante.
Ejemplo: Num1 number; nombre varchar(50); num2 number(3,2); /* numero entero de 3 cifras y 2 decimales*/ contador number default 8; apellido char(20) not null:=ruiz; nombre nomtabla.nomcolum%type
4. ESTRUCTURAS DE CONTROL. A. Alternativas: Alternativas simples. If <condicion> then /*instrucciones*/; end if; Alternativa doble. If <condicin> then /*instrucciones*/; else /*instrucciones*/; end if; Alternativa mltiple. If <condicion> then /*instrucciones*/; elsif <condicion> then /*instrucciones*/; elsif <condicion> then /*instrucciones*/; ...................
ejemplos: caso 1: if A>B then c:=1; else c:=2; end if; caso 2: if a is null or b is null then c:=3; elsif a<b then c:=1; else c:=2; end if; B. Repetitivas. FOR. Incremento: For <variable> in <minimo>..<maximo> loop /*instrucciones*/; end loop; Decremento: For <variable> in reverse <minimo> .. <maximo> loop /*instrucciones*/ end loop;
ejemplos: caso 1: for i in 1..3 loop dbms_output.put_line(i); /*esto me muestra por pantalla el valor de i */ end loop; caso 2: for i in reverse 1..3 loop dbms_output.put_line(i); end loop;
WHILE While <condicion> loop /* instrucciones*/ end loop; LOOP Loop /* instrucciones*/ exit when <condicion> /*instrucciones*/; end loop; EJERCICIOS-EJEMPLOS. Para la visualizacin de los programas la variable SERVEROUTPUT deber estar en ON, para ello ejecutamos la siguiente lnea en la consola de sqlplus: SET SERVEROUTPUT ON 1. Escribir un bloque que escriba en la pantalla Hola Mundo. Sql>BEGIN 2 Dbms_output.put_line(Hola Mundo); 3 END; Hola Mundo Procedimiento PL/SQL terminado con xito. 2. Este procedimiento muestra el nombre de una persona especificada. Para este problema utilizaremos una tabla que Oracle instala, utilizamos de la tabla emp el campo ename. Sql> DECLARE 2 nombre varchar2(50); /* otra forma de declaracin de variable: nombre emp.ename%type*/ 3 BEGIN 4 select ename into nombre 5 from emp 6 where ename=SMITH; 7 dbms_output.put_line(nombre); 8 END; SMITH Procedimiento PL/SQL terminado con xito. 3. Escribe el cdigo para saber de la tabla anterior emp, el nmero de filas que hay.
Sql> DECLARE 2 num_filas number; 3 BEGIN 4 Select count(*) into num_filas 5 From emp; 6 Dbms_output.put_line(El numero de filas es: ||num_filas); 7 End; El nmero de filas es: 14 Procedimiento PL/SQL terminado con xito. EJERCICIOS PROPUESTOS 1. Escribir el cdigo de un bloque PL/SQL que muestre por pantalla el texto: HOLA 2. escribir el cdigo de un bloque PL/SQL que muestre por pantalla lo siguiente: Soy el nmero: 1 Soy el nmero: 2 Soy el nmero: 3 Soy el nmero: 4 3. Escribir el cdigo de un bloque PL/SQL que muestre lo siguiente: Soy el nmero: 4 Soy un nmero Par Soy el nmero: 3 Soy un nmero impar Soy el nmero: 2 Soy un nmero Par Soy el numero 1 Soy un nmero impar 4. Escribir el cdigo de un bloque PL/SQL que muestre la suma de los 50 primeros nmeros. 5. Escribir el cdigo de un bloque PL/SQL que muestre la suma del salario (SAL) de la tabla EMP. 6. Escribir el cdigo de un bloque PL/SQL que muestre nombre de la persona (ENAME) y su correspondiente salario (SAL).
CONTROLES CONDICIONALES, CONTROLES ITERATIVOS Y CONTROLES SECUENCIALES IF y else..... IF --Condition THEN --Action ELSEIF --Condition THEN --Action ELSE --Action END IF; LOOP SIMPLE loop -- Sequence of statements; end loop; the loop ends when u use EXIT WHEN statement --condition WHILE LOOP While --condition loop --sequence of statements end loop; FOR LOOP FOR i in 1..10 loop --sequence of statements end loop; GOTO (Control Secuencial) GOTO X; << X >> --Adicin Declare a number; b number; c number; Begin a:=&a; b:=&b; c:=a+b; dbms_output.put_line('Suma de ' || a || 'y ' || b || ' es ' || c); End; Aqu & es usado para tomar valores desde teclado.
--Suma de 100 Numeros Declare a number; s1 number default 0; Begin a:=1; loop
s1:=s1+a; exit when (a=100); a:=a+1; end loop; dbms_output.put_line('Sum between 1 to 100 is '||s1); End; --Suma impares... for loop declare n number; sum1 number default 0; endvalue number; begin endvalue:=&endvalue; n:=1; for n in 1.. endvalue loop if mod(n,2)=1 then sum1:=sum1+n; end if end loop; dbms_output.put_line('sum = ' || sum1); end; --Suma de 100 nmeros impares. WHILE LOOP declare n number; endvalue number; sum1 number default 0; begin endvalue:=&endvalue; n:=1; while (n < endvalue) loop sum1:=sum1+n; n:=n+2; end loop; dbms_output.put_line('Sum of odd numbers between 1 and ' || endvalue || ' is ' || sum1); end;
--CALCULATION OF NET SALARY declare ename varchar2(15); basic number; da number; hra number; pf number; netsalary number; begin ename:=&ename; basic:=&basic; da:=basic * (41/100);
hra:=basic * (15/100); if (basic < 3000) then pf:=basic * (5/100); elsif (basic >= 3000 and basic <= 5000) then pf:=basic * (7/100); elsif (basic >= 5000 and basic <= 8000) then pf:=basic * (8/100); else pf:=basic * (10/100); end if; netsalary:=basic + da + hra -pf; dbms_output.put_line('Employee name : ' || ename); dbms_output.put_line('Providend Fund : ' || pf); dbms_output.put_line('Net salary : ' || netsalary); end; --MAXIMUM OF 3 NUMBERS Declare a number; b number; c number; d number; Begin dbms_output.put_line('Enter a:'); a:=&a; dbms_output.put_line('Enter b:'); b:=&b; dbms_output.put_line('Enter c:'); c:=&b; if (a>b) and (a>c) then dbms_output.putline('A is Maximum'); elsif (b>a) and (b>c) then dbms_output.putline('B is Maximum'); else dbms_output.putline('C is Maximum'); end if; End;