Oracle Sep 06 PL SQL
-
Upload
jean-pierre-quispe -
Category
Documents
-
view
11 -
download
0
Transcript of 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
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’;
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.
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
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;
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');
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;
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:
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;