Oracle Sep 06 PL SQL

9
UNIVERSIDAD NACIONAL JOSE FAUSTINO SANCHEZ CARRION FACULTAD DE INGENIERIA ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA INFORMATICA CURSO BASE DE DATOS II SEPARATA Nº 06 PL/SQL (PROCEDURAL LANGUAGE / SQL) DOCENTE ING. EDWIN IVAN FARRO PACIFICO HUACHO-LIMA PERU

Transcript of Oracle Sep 06 PL SQL

Page 1: Oracle Sep 06 PL SQL

UNIVERSIDAD NACIONALJOSE FAUSTINO SANCHEZ CARRION

FACULTAD DE INGENIERIA

ESCUELA ACADEMICO PROFESIONAL DEINGENIERIA INFORMATICA

CURSOBASE DE DATOS II

SEPARATA Nº 06PL/SQL

(PROCEDURAL LANGUAGE / SQL)

DOCENTEING. EDWIN IVAN FARRO PACIFICO

HUACHO-LIMAPERU

Page 2: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 2

PL/SQL(PROCEDURAL LANGUAGE/SQL)

Es un sofisticado lenguaje de programación que se utiliza para acceder a bases de datos Oracledesde distintos entornos. Está integrado con el servidor, de modo que el código PL/SQL puede serprocesado de forma rápida y eficiente.PL/SQL amplia la funcionalidad de SQL añadiendo estructuras de las que pueden encontrarse enotros lenguajes procedimentales como:

Variables y tipos. Estructuras de control Procedimientos y funciones Tipos de objetos y métodos.

EL MOTOR PL/SQLEstos dos ambientes son independientes. En cualquiera de estos dos ambientes, el motor PL/SQLacepta como entrada válida cualquier bloque PL/SQL o subprograma.L siguiente figura muestra como el motor PL/SQL procesa un bloque anónimo. El motor ejecuta lassentencias procedimentales y envía las sentencias SQL al ejecutor de estas sentencias en elservidor Oracle.

EL BLOQUE PL/SQLLa unidad básica de cualquier programa PL/SQL es el bloque. Todos los programas PL/SQL estáncompuestos por bloques, que pueden estar situados de manera secuencial 8uno después de otro) oestar anidados (uno dentro de otro).

Declaración de variablesExisten dos tipos:

Constantes Variables

Ejemplo:Declaración ilegal

DECLAREnombre,direccion VARCHAR2(50)

Declaración correcta

Tipo CHAR y VARCHAR2DECLARE

Codigo CHAR(5);Nombre VARCHAR2(50);Direccion VARCHAR2(50);

Tipo NUMBER y CONSTANTEDECLARE

Salario NUMBER(10,2);Institución CONSTANT VARCHAR2(20) := ‘INGENIERIA INFORMATICA’;

Page 3: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 3

Tipo DATEDECLARE

Inicio DATE := ‘1-06-05’;

Tipo BOOLEANDECLARE

Estado BOOLEAN NOT NULL := FALSE;Activado BOOLEAN := TRUE;

DECLARACION DE ATRIBUTOSPara la definición de los tipos de datos de las variables se pueden referenciar a tipos de datosdefinidos en el diccionario de datos denominados atributos.

Atributo %TYPEUn identificador que se declara con este tipo de atributo toma la definición de un identificadorexistente o la de una columna de una tabla.Ejemplo:

DECLAREv_deptno dept.deptno%type;v_dname dept.dname%type;v_loc dept.loc%type;BEGIN

v_deptno:=60;v_dname:='SISTEMAS';v_loc:='LIMA';INSERT INTO dept(deptno,dname,loc)VALUES(v_deptno,v_dname,v_loc);

END;

Atributo %ROWTYPEUn identificador que se declara con este tipo de atributo toma la definición que tiene toda la fila deuna tabla.Ejemplo:

DECLAREv_dept dept%rowtype;BEGIN

v_dept.deptno:=70;v_dept.dname:='FINANZAS';v_dept.loc:='HUACHO';INSERT INTO dept(deptno,dname,loc)VALUES(v_dept.deptno,v_dept.dname,v_dept.loc);

END;

AMBITO Y VISIBILIDAD DE LAS VARIABLESEl ámbito de una variable es aquella parte del programa en la que se puede acceder a dichavariable. Para una variable PL/SQL, será desde la definición de la variable hasta el final del bloque.

Page 4: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 4

Cuando una variable cae fuera del ámbito, el motor PL/SQL libera la memoria utilizada paraalmacenar, dado que ya no se puede hacer referencia a la misma.

SQL DENTRO DE PL/SQL

El lenguaje estructurado de consultas (SQL) define como manipular los datos de Oracle. Loscomponentes procedimientales de PL/SQL son considerablemente más útiles cuando se combinana los programas PL/SQL manipular datos en la base de datos ORACLE.PL/SQL soporta las siguientes instrucciones SQL:

Insert Update Delete Select

INSERTEjemplo:DECLAREv_empno number(4):=7950;v_ename varchar2(10):='DIANA';BEGIN

INSERT INTO emp(empno,ename)VALUES(v_empno,v_ename);

END;

UPDATEEjemplo:DECLAREv_empno number(4):=7950;v_hiredate date:=SYSDATE-1;BEGIN

UPDATE empSET hiredate=v_hiredateWHERE empno=v_empno;

END;

DECLAREv_numero NUMBER(5,2);BEGIN

DECLAREv_caracter VARCHAR2(10);BEGIN……………..……………..……………..END;

END;

Ámbito dev_numero Ámbito de

v_caracter

Page 5: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 5

DELETEEjemplo:DECLAREv_empno number(4):=7950;BEGIN

DELETE FROM empWHERE empno=v_empno;

END;

SELECTEjemplo:DECLAREv_empno emp.empno%type:=7876;v_ename emp.ename%type;v_sal emp.sal%type;BEGIN

SELECT empno,ename,salINTO v_empno,v_ename,v_salFROM empWHERE empno=v_empno;dbms_output.put_line('El empleado : ' ||v_ename||' gana '|| TO_CHAR(v_sal));

END;

Ejemplo:DECLAREv_dept dept%rowtype;BEGIN

v_dept.deptno:=10;SELECT dname,locINTO v_dept.dname,v_dept.locFROM deptWHERE deptno=v_dept.deptno;dbms_output.put_line('El departamento : '||v_dept.dname||' está ubicado en '||v_dept.loc);

END;

CONTROL ITERATIVO Y CONDICIONAL

INSTRUCCIÓN IFEjecuta condicionalmente una instrucción o un a secuencia de instrucciones.Sintaxis:

IF <condición> THEN<instrucciones>;

ELSIF<instrucciones>;

ELSE<instrucciones>;

END IF;

Page 6: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 6

Ejemplo:DECLAREv_ename emp.ename%type;v_sal emp.sal%type;v_hiredate emp.hiredate%type;BEGIN

SELECT ename,sal,hiredateINTO v_ename,v_sal,v_hiredateFROM empWHERE empno=7369;IF (v_sal=800) then

dbms_output.put_line(v_ename||' Gana 800 ');ELSE

dbms_output.put_line(v_ename||' No gana 800');END IF;

END;

Ejemplo:DECLAREv_ename emp.ename%type;v_sal emp.sal%type;v_hiredate emp.hiredate%type;BEGIN

SELECT ename,sal,hiredateINTO v_ename,v_sal,v_hiredateFROM empWHERE empno=7369;IF (v_sal=800) then

dbms_output.put_line(v_ename||' Gana 800 ');

ELSIF (v_sal<800) thendbms_output.put_line(v_ename||' Gana menos de 800');

ELSEdbms_output.put_line(v_ename||' Gana más de 800');

END IF;END;

Ejemplo:DECLAREv_deptno NUMBER;BEGIN

SELECT ROUND(dbms_random.value*10)*10INTO v_deptno FROM dual;IF v_deptno=10 THEN

dbms_output.put_line(v_deptno||': Contabilidad');ELSIF v_deptno=20 THEN

dbms_output.put_line(v_deptno||': Investigación');

Page 7: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 7

ELSIF v_deptno=30 THENdbms_output.put_line(v_deptno||': Ventas');

ELSIF v_deptno=40 THENdbms_output.put_line(v_deptno||': Operaciones');

ELSEdbms_output.put_line('Sin departamento');

END IF;END;

INSTRUCCIÓN CASEUna instrucción CASE evalúa una expresión, y de acuerdo al resultado de ella ejecuta o realiza unade varias alternativas posibles.Sintaxis:CASE test%variable

WHEN valor1 THEN secuencia_instrucciones1WHEN valor1 THEN secuencia_instrucciones2…[ELSE otra_secuencia]

END CASE;

Ejemplo:DECLAREv_ename emp.ename%type;v_deptno emp.deptno%type;BEGIN

SELECT ename,deptnoINTO v_ename,v_deptnoFROM empWHERE empno=7369;dbms_output.put_line(v_ename||' Trabaja en : ');CASE v_deptno

WHEN 10 then dbms_output.put_line('Operaciones');WHEN 20 then dbms_output.put_line('Logística');WHEN 30 then dbms_output.put_line('Contabilidad');

END CASE;END;

Page 8: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 8

INSTRUCCIONES CONDICIONALES

BUCLE LOOPSintaxis:Loop

<instrucciones>;end loop;

Ejemplo:Visualizar los 10 primeros números naturalesDECLAREcont NUMBER:=1;BEGIN

LOOPdbms_output.put_line('Número:'||to_char(cont,'9999'));cont:=cont+1;EXIT WHEN cont>10;

END LOOP;END;

BUCLE FORSintaxis:FOR <indice> IN [REVERSE] <inicio>..<fin> LOOP

<instrucciones>END LOOP;

Ejemplo:Visualizar los 10 primeros números naturalesDECLAREcont NUMBER;BEGIN

FOR cont IN 1..10 LOOPdbms_output.put_line('Número:'||to_char(cont,'9999'));

END LOOP;END;

Visualizar los 10 primeros números naturales en forma descendenteDECLAREcont NUMBER;BEGIN

FOR cont IN REVERSE 1..10 LOOPdbms_output.put_line('Número:'||to_char(cont,'9999'));

END LOOP;END;

BUCLE WHILERepiten una secuencia de instrucciones hasta que una condición especifica ya no sea verdadera.Sintaxis:

Page 9: Oracle Sep 06 PL SQL

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 9

WHILE <condicion> LOOP<instrucciones>

LOOP;

DECLAREcont NUMBER;BEGIN

cont:=1;WHILE (cont<=10) LOOP

dbms_output.put_line('Número:'||to_char(cont,'9999'));cont:=cont+1;

END LOOP;END;