Slideshow transcript
Slide 1: 1 Introducción PL/SQL ² Qué es PL/SQL ? ² Características http://luisgpalomino.blogspot.com/ 1 03/10/07
Slide 2: Que es PL/SQL ? Es un lenguaje de programación usado para accesar bases de datos Oracle. Está integrado con la base de datos. PL/SQL es una ampliación al SQL. http://luisgpalomino.blogspot.com/ 2 03/10/07
Slide 3: Características... Lenguaje Estructurado Declare Sección para declarar variables,cursores,tipos,etc. Begin Sección para estamentos SQL y estructuras de control. Exception Sección para el manejo de errores y excepciones. End; http://luisgpalomino.blogspot.com/ 3 03/10/07
Slide 4: Características... Variables y Tipos(Predefinidos o de Usuario. Variables con tipos predefinidos : date, number,char,varchar,long,blob,etc. v_nombre varchar2(30); v_fecha date; v_dias number; http://luisgpalomino.blogspot.com/ 4 03/10/07
Slide 5: Características... Variables y Tipos(Predefinidos o de Usuario. Variables con Tipos de Usuario : TYPE t_afiliado is Record ( cedula number, nombre varchar2(50) ); v_afiliado t_afiliado; http://luisgpalomino.blogspot.com/ 5 03/10/07
Slide 6: Características... Estructuras de Control If ...then... Else... End if Loop ...Exit When... End Loop For ... In...Loop ...End Loop http://luisgpalomino.blogspot.com/ 6 03/10/07
Slide 7: Características... Cursores Usados para procesar múltiples registros. CURSOR c_presta IS SELECT cod_prestatario FROM csv_prestatario WHERE cod_oficina = ‘101’; http://luisgpalomino.blogspot.com/ 7 03/10/07
Slide 8: Características... Otras Características : Manejo de Paquetes, Procedimientos y Funciones. Objetos y Métodos. http://luisgpalomino.blogspot.com/ 8 03/10/07
Slide 9: 2 PL/SQL Basics... Bloques PL/SQL. ² ² Bloque Anónimo. ² Bloque Nombrado. ² Subprogramas. ² Triggers. ² Estructura Básica. ² Identificadores. ² Comentarios. ² Declaración Variables. http://luisgpalomino.blogspot.com/ 9 03/10/07
Slide 10: 2 PL/SQL Basics... Tipos PL/SQL. ² ² Usando %TYPE. ² Subtipos Definidos. ² Conversiones. ² Alcance de las Variables. ² Estructuras de Control. http://luisgpalomino.blogspot.com/ 10 03/10/07
Slide 11: Estructura Básica... DECLARE /* Sección Declarativa... */ BEGIN /* Sección Ejecutable... */ EXCEPTION /* Sección Exception... */ END; http://luisgpalomino.blogspot.com/ 11 03/10/07
Slide 12: Identificadores... Objetos PL/SQL. – Variables. – Cursores. – Types. – Subprogramas. Correctos: Incorrectos: x x+y v_id_personal _temp_ v2_ nom afilia id_usuario_# 1_apellido Caractérísticas. – Máximo 30 Caracteres. – No Palabras Reservadas. http://luisgpalomino.blogspot.com/ 12 03/10/07
Slide 13: Comentarios... Línea Sencilla. (--) DECLARE d_fecha DATE; -- Se Declara la Variable -- Tipo Fecha... BEGIN ---------------------------------- -- Asigna la Fecha del Sistema... d_fecha := SYSDATE; END; Multi-Línea. (/*... */) DECLARE d_fecha DATE; /* Se Declara la Variable Tipo Fecha...*/ BEGIN /*-------------------------------- Asigna la Fecha del Sistema...*/ d_fecha := SYSDATE; END; http://luisgpalomino.blogspot.com/ 13 03/10/07
Slide 14: Declaración Variables... Sintaxis... nom_vble type [CONSTANT] [NOT NULL] [:= valor]: DECLARE vc_nom_afilia VARCHAR2(50); n_num_afilia NUMBER := 50; n_pos BINARY_INTEGER := 0; n_cant_minima CONSTANT NUMBER(5) := 10000; n_num_cartas NUMBER DEFAULT 50; INCORRECTAS DECLARE vc_nom_afilia, vc_ape_afilia VARCHAR2(50); n_num_afilia NUMBER NOT NULL; http://luisgpalomino.blogspot.com/ 14 03/10/07
Slide 15: Tipos PL/SQL... http://luisgpalomino.blogspot.com/ 15 03/10/07
Slide 16: Usando %TYPE... DECLARE vc_nom_afilia VARCHAR2(50); DECLARE x_nom_afilia csv_afiliado.nm1_afilia%TYPE; NOTA: Es una buena práctica de Programación el uso de %TYPE, ya que proporciona Flexibilidad y Habilidad para que los programas se adapten al movimiento de la Base de Datos. http://luisgpalomino.blogspot.com/ 16 03/10/07
Slide 17: Subtipos Definidos... Sintaxis... SUBTYPE tipo_nuevo IS tipo_original; DECLARE SUBTYPE tn_contador IS NUMBER; n_contador tn_contador; SUBTYPE tx_nom_afilia IS csv_afiliado.nm1_afilia%TYPE; x_vble NUMBER(4); SUBTYPE tn_cantidad IS x_vble%TYPE; n_vble tn_cantidad; http://luisgpalomino.blogspot.com/ 17 03/10/07
Slide 18: Conversiones... Explícitas... – TO_CHAR – TO_DATE – TO_NUMBER – RAWTOHEX – HEXTORAW – CHARTOROWID – ROWIDTOCHAR Implícitas... DECLARE vc_edad VARCHAR2(5); BEGIN SELECT edad_afilia INTO vc_edad FROM csv_afiliado WHERE ide_afili = ‘98532011’; END; http://luisgpalomino.blogspot.com/ 18 03/10/07
Slide 19: Alcance de las Variables... DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN END; END; http://luisgpalomino.blogspot.com/ 19 03/10/07
Slide 20: Alcance de las Variables... DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN END; END; http://luisgpalomino.blogspot.com/ 20 03/10/07
Slide 21: Alcance de las Variables... DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN n_valor Number(9) DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN END; END; http://luisgpalomino.blogspot.com/ 21 03/10/07
Slide 22: Alcance de las Variables... DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN n_valor Number(9) DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN n_valor Char(11) END; END; http://luisgpalomino.blogspot.com/ 22 03/10/07
Slide 23: Alcance de las Variables... DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN n_valor Number(9) DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN n_valor Char(11) END; n_valor Number(9) END; http://luisgpalomino.blogspot.com/ 23 03/10/07
Slide 24: Alcance de las Variables... <<l_Fuera>> DECLARE b_Ok BOOLEAN; n_valor NUMBER(9); BEGIN n_valor Number(9) DECLARE n_valor CHAR(11); d_fecha DATE; BEGIN n_valor Char(11) END; l_Fuera.n_valor Number(9) END; http://luisgpalomino.blogspot.com/ 24 03/10/07
Slide 25: Estructuras de Control... IF/THEN/ELSE IF <Cond1.> THEN <Instrucciones...>; [ELSIF <Cond2.> THEN <Instrucciones...>]; ... [ELSE <Instrucciones...>]; END IF; http://luisgpalomino.blogspot.com/ 25 03/10/07
Slide 26: Estructuras de Control... IF/THEN/ELSE Numéricas. n_cant = 0 IF <Cond1.> THEN n_cant >= 0 <Instrucciones...>; Cadena. [ELSIF <Cond2.> THEN x_nom = ‘Lopez’ <Instrucciones...>]; ... Booleana. b_ok [ELSE NOT b_ok <Instrucciones...>]; END IF; Nulas. n_cant IS NULL http://luisgpalomino.blogspot.com/ 26 03/10/07
Slide 27: Estructuras de Control... IF/THEN/ELSE Loops – Simples. LOOP <Instrucciones> END LOOP; http://luisgpalomino.blogspot.com/ 27 03/10/07
Slide 28: Estructuras de Control... IF/THEN/ELSE Loops – Simples. LOOP <Instrucciones> END LOOP; Con salida... LOOP EXIT [WHEN <Condición>]; END LOOP; http://luisgpalomino.blogspot.com/ 28 03/10/07
Slide 29: Estructuras de Control... IF/THEN/ELSE Loops – Simples. – WHILE Loops. WHILE <Condición> LOOP <Instrucciones>; END LOOP; http://luisgpalomino.blogspot.com/ 29 03/10/07
Slide 30: Estructuras de Control... IF/THEN/ELSE Loops – Simples. – WHILE Loops. – # FOR Loops. FOR contador IN [REVERSE] lim_inf..lim_sup LOOP <Instrucciones>; END LOOP; FOR n IN 1..50 LOOP ... http://luisgpalomino.blogspot.com/ 30 03/10/07
Slide 31: Estructuras de Control... IF/THEN/ELSE Pueden ser variables: Loops DECLARE n_lim_inf NUMBER := 1; n_lim_sup NUMBER := 50; – Simples. BEGIN FOR n IN n_lim_inf..n_lim_sup LOOP – WHILE Loops. ... Usando REVERSE: – # FOR Loops. DECLARE FOR contador IN [REVERSE] lim_inf..lim_sup LOOP n_lim_inf NUMBER := 1; <Instrucciones>; n_lim_sup NUMBER := 50; BEGIN END LOOP; FOR n IN REVERSE 1..50 LOOP ... FOR n IN 1..50 LOOP ... http://luisgpalomino.blogspot.com/ 31 03/10/07
Slide 32: Estructuras de Control... IF/THEN/ELSE • No es necesario declarar la vble: n. • Si se declara, la vble n, pierde el valor Loops dentro del ciclo. Esta variable es de tipo BINARY_INTEGER. – Simples. DECLARE – WHILE Loops. n NUMBER := 10; BEGIN FOR n IN 1..5 LOOP – # FOR Loops. ... FOR contador IN [REVERSE] lim_inf..lim_sup LOOP <Instrucciones>; END LOOP; FOR n IN 1..50 LOOP ... http://luisgpalomino.blogspot.com/ 32 03/10/07
Slide 33: Estructuras de Control... IF/THEN/ELSE Loops – Simples. – WHILE Loops. – # FOR Loops. GOTO – Etiquetas (<<...>>). http://luisgpalomino.blogspot.com/ 33 03/10/07
Slide 34: Estructuras de Control... IF/THEN/ELSE • Saltar al interior de un IF. • Saltar al Interior de un Bloque. Loops • Saltar de un IF a otro o al mismo por el ELSE. • Saltar desde una rutina de manejo – Simples. de EXCEPTION al bloque anterior. – WHILE Loops. – # FOR Loops. GOTO – Etiquetas (<<...>>). – Restricciones. http://luisgpalomino.blogspot.com/ 34 03/10/07
Slide 35: 3 Records and Tables ² Records Declaración Asignación Usando %ROWTYPE ² Tables Declaración Asignación Atributos http://luisgpalomino.blogspot.com/ 35 03/10/07
Slide 36: Records... Son similares a las estructuras de Power Builder. Se manejan como una unidad. Declaración: Sintaxis – TYPE nombre_record IS RECORD ( campo_1 type1 [NOT NULL] [:= expr1], campo_2 type2 [NOT NULL] [:= expr2], ... campo_n typen [NOT NULL] [:= exprn]) http://luisgpalomino.blogspot.com/ 36 03/10/07
Slide 37: Records... Declaración: Ej: TYPE t_afiliado is Record ( cedula number, nombre csv_afiliado.nm1_afilia%type ); v_afiliado t_afiliado; http://luisgpalomino.blogspot.com/ 37 03/10/07
Slide 38: Records... Asignación. – Un registro puede ser asignado a otro registro. Sintaxis: record1 := record2; record_name.campo := valor; Ej: t_afiliado.cedula := 16762276; t_afiliado.nombre := Gus; SELECT ide_afili,nm1_afilia INTO t_afiliado FROM csv_afiliado WHERE cod_afiliado = as_codigo; http://luisgpalomino.blogspot.com/ 38 03/10/07
Slide 39: Records Usando %ROWTYPE. row_cartera CSV_CARTERA%ROWTYPE; http://luisgpalomino.blogspot.com/ 39 03/10/07
Slide 40: Tables... Son similares a un arreglo. Declaración: Sintaxis – TYPE table_name IS TABLE OF type INDEX BY BINARY_INTEGER; Ej: TYPE t_cartera IS TABLE OF csv_cartera%ROWTYPE INDEX BY BINARY_INTEGER; http://luisgpalomino.blogspot.com/ 40 03/10/07
Slide 41: Tables... Asignación Sintaxis: table(index).campo La variable index debe ser de tipo binary_integer. Ej: TYPEt_codigos IS TABLE OF CHAR(13) INDEX BY BINARY_INTEGER; V_codigos t_codigos; V_cartera t_cartera; V_codigos(1) := ‘1010000000123’; V_cartera(1).con_cartera := ‘1010001234556’; http://luisgpalomino.blogspot.com/ 41 03/10/07
Slide 42: Tables... Atributos Atributo Retorna Tipo Descripción COUNT NUMBER Numero de Filas DELETE N/A Borra Filas EXISTS BOOLEAN Valida existencia FIRST BINARY_INTEGER Índice de 1a Fila LAST BINARY_INTEGER Índice de ultima fila NEXT BINARY_INTEGER Índice de la sgte fila PRIOR BINARY_INTEGER Índice de la anterior fila http://luisgpalomino.blogspot.com/ 42 03/10/07
Slide 43: Tables... Atributos Ej: DECLARE TYPE t_table IS TABLE OF CHAR(1) INDEX BY BINARY_INTEGER; v_tabla t_table; regs BINARY_INTEGER ; filas BINARY_INTEGER ; BEGIN v_tabla(1) := 'a'; v_tabla(3) := 'b'; v_tabla(5) := 'c'; regs := v_tabla.first; http://luisgpalomino.blogspot.com/ 43 03/10/07
Slide 44: Tables... Atributos filas := v_tabla.COUNT; IF v_tabla.EXISTS(4) THEN dbms_output.put_line('EXISTE'); ELSE dbms_output.put_line('NO EXISTE'); END IF; LOOP dbms_output.put_line(regs); dbms_output.put_line('leo '||v_tabla(regs)); EXIT WHEN regs = v_tabla.last; regs := v_tabla.NEXT(regs); END LOOP; END; http://luisgpalomino.blogspot.com/ 44 03/10/07
Slide 45: 4 SQL en PL/SQL... Categorías SQL. ² ² D.M.L. ² DB Link. ² Sinónimos. ² Pseudo-Columnas. ² Privilegios. ² Control de Transacciones. ² COMMIT; ² ROLLBACK; ² SAVEPOINT; http://luisgpalomino.blogspot.com/ 45 03/10/07
Slide 46: Categorías SQL... D.M.L. (INSERT, UPDATE, DELETE, SET ² TRANSACTION, EXPLAIN PLAN). D.D.L. (DROP, CREATE, ALTER, GRANT, REVOKE). ² Control de Transacciones. (COMMIT, ROLLBACK, ² SAVEPOINT). Control de Sesión. (ALTER SESION, SET ROLE). ² Control del Sistema. (ALTER SYSTEM). ² SQL Embebido. (CONNECT, DECLARE CURSOR, ² ALLOCATE). http://luisgpalomino.blogspot.com/ 46 03/10/07
Slide 47: D.M.L... SELECT. ² SELECT <Lista_Selección> INTO <Lista_Variables> FROM <Lista_Tablas> [WHERE <Condiciones>] [GROUP BY <Lista_Selección>] [ORDER BY <Lista_Selección>]; http://luisgpalomino.blogspot.com/ 47 03/10/07
Slide 48: D.M.L... SELECT. ² INSERT. ² INSERT INTO <Tabla_Referenciada> [(<Lista_Columnas>)] VALUES (<Lista_Expresiones>); INSERT INTO <Tabla_Referenciada> <Sentencia_SELECT>; http://luisgpalomino.blogspot.com/ 48 03/10/07
Slide 49: D.M.L... SELECT. ² INSERT. ² UPDATE. ² UPDATE <Tabla_Referenciada> SET <Columna_1> = <Expresión_1>, [<Columna_2> = <Expresión_2>, <Columna_n> = <Expresión_n>] [WHERE <Lista_Condiciones>]; http://luisgpalomino.blogspot.com/ 49 03/10/07
Slide 50: D.M.L... SELECT. ² INSERT. ² UPDATE. ² DELETE. ² DELETE FROM <Tabla_Referenciada> [WHERE <Lista_Condiciones>]; http://luisgpalomino.blogspot.com/ 50 03/10/07
Slide 51: DB Link... CREATE DATABASE LINK <Nombre_Enlace> ² CONNECT TO <Nombre_Usuario> IDENTIFIED BY <Contraseña> USING <Cadena_Conexión>; CREATE DATABASE LINK PRUEBAS CONNECT TO nalarodriguez IDENTIFIED BY nalarodriguez USING “PRODUCCION”; UPDATE csv_afiliado@PRUEBAS ² SET nm1_afilia = ‘PEDRO’ WHERE nm1_afilia LIKE ‘PEDR%’; http://luisgpalomino.blogspot.com/ 51 03/10/07
Slide 52: Sinónimos... CREATE SYNONYM <Nombre_Sinónimo> FOR <Objeto_Referencia>; ² ² CREATE SYNONYM afiliado_consulta FOR csv_afiliado@PRUEBAS; http://luisgpalomino.blogspot.com/ 52 03/10/07
Slide 53: Sinónimos... CREATE SYNONYM <Nombre_Sinónimo> FOR <Objeto_Referencia>; ² ² CREATE SYNONYM afiliado_consulta FOR csv_afiliado@PRUEBAS; UPDATE csv_afiliado@PRUEBAS SET nm1_afilia = ‘PEDRO’ WHERE nm1_afilia LIKE ‘PEDR%’; Reemplazando... UPDATE afiliado_consulta SET nm1_afilia = ‘PEDRO’ WHERE nm1_afilia LIKE ‘PEDR%’; http://luisgpalomino.blogspot.com/ 53 03/10/07
Slide 54: Pseudo-Columnas... CURRVAL y NEXTVAL. ² <Lista_Selección> de Sentencias SELECT. ² <Lista_Expresiones> de la Cláusula VALUES (INSERT). ² Con la Cláusula SET del UPDATE. ² No pueden usarse en WHERE. ² LEVEL. ² ROWID. ² ROWNUM. ² USER. ² SYSDATE. ² http://luisgpalomino.blogspot.com/ 54 03/10/07
Slide 55: Privilegios... (GRANT y REVOKE) GRANT... ² GRANT <Privilegio> ON <Objeto> TO <Destinatario> [WITH GRANT OPTION]; GRANT <Privilegio> TO <Destinatario> [WITH GRANT OPTION]; Objetos: GRANT SELECT ON csv_afiliado TO nalcaagudelo; GRANT INSERT, UPDATE ON csv_afiliado TO nalcaagudelo; Sistema: GRANT CREATE TABLE, ALTER ANY PROCEDURE TO nalcaagudelo; http://luisgpalomino.blogspot.com/ 55 03/10/07
Slide 56: Privilegios... (GRANT y REVOKE) GRANT... ² ² REVOKE... REVOKE <Privilegio> ON <Objeto> FROM <Destinatario> [CASCADE CONSTRAINTS]; REVOKE <Privilegio> FROM <Destinatario>; Objetos: REVOKE SELECT ON csv_afiliado FROM nalcaagudelo; REVOKE INSERT, UPDATE ON csv_afiliado FROM nalcaagudelo; Sistema: REVOKE CREATE TABLE, ALTER ANY PROCEDURE FROM nalcaagudelo; http://luisgpalomino.blogspot.com/ 56 03/10/07
Slide 57: 5 Funciones SQL Predefinidas SQL proporciona diversas funciones predefinidas que se puede llamar desde una orden SQL. Ej: SELECT UPPER(nm1_afilia) FROM csv_afiliado Muchas de las funciones pueden ser llamadas desde ordenes procedimentales. EJ: DECLARE v_nm1_afilia csv_afiliado.nm1_afilia%TYPE; BEGIN v_nm1_afilia := UPPER(‘Orlando’); END; http://luisgpalomino.blogspot.com/ 57 03/10/07
Slide 58: Categorias de Funciones ² Tipode argumento que cada función admite ² Grupo ² De una sola fila http://luisgpalomino.blogspot.com/ 58 03/10/07
Slide 59: Funciones de carácter que devuelven valores de carácter CHR Sintaxis CHR(x) Propósito Devuelve el carácter del conjunto de caracteres cuyo valor es equivalente a x. Ejemplo: select chr(97) from dual; Resultado: a http://luisgpalomino.blogspot.com/ 59 03/10/07
Slide 60: Funciones de carácter que devuelven valores de carácter CONCAT Sintaxis CNCAT(cadena1,cadena2) Propósito Devuelve la cadena1 concatenada con la cadena2. Ejemplo: select concat('Orlando',' Valverde') from dual; Resultado: Orlando Valverde http://luisgpalomino.blogspot.com/ 60 03/10/07
Slide 61: Funciones de carácter que devuelven valores de carácter INITCAP Sintaxis INITCAP(cadena) Propósito Devuelve la misma cadena,con el primer carácter de cada palabra en mayúscula y el resto en minusculas. Ejemplo: select initcap('OrLando valvErde') from dual; Resultado: Orlando Valverde http://luisgpalomino.blogspot.com/ 61 03/10/07
Slide 62: Funciones de carácter que devuelven valores de carácter LOWER Sintaxis LOWER(cadena) Propósito Devuelve la misma cadena,con todos los caracteres en minúsculas. Ejemplo: select lower('OrLando valvErde') from dual; Resultado: orlando valverde http://luisgpalomino.blogspot.com/ 62 03/10/07
Slide 63: Funciones de carácter que devuelven valores de carácter LPAD Sintaxis LPAD(cadena1, x[,cadena2]) Propósito Devuelve la cadena1 rellena hacia la izquierda con los caracteres de la cadena2. http://luisgpalomino.blogspot.com/ 63 03/10/07
Slide 64: Funciones de carácter que devuelven valores de carácter LPAD Ejemplos select LPAD('Orlando Valverde',18) from dual Resultado: Orlando Valverde select LPAD('Orlando Valverde',25,’XY’) from dual Resultado: XYXYXYXYXOrlando Valverde select LPAD('Orlando Valverde',17,’XY’) from dual Resultado: XOrlando Valverde http://luisgpalomino.blogspot.com/ 64 03/10/07
Slide 65: Funciones de carácter que devuelven valores de carácter LTRIM Sintaxis LTRIM(cadena1[,cadena2]) Propósito Devuelve la cadena1, quitando los caracteres de la izquierda contenidos en cadena2. Ejemplo: select ltrim('OrLando’, ‘O’) from dual; Resultado: rlando http://luisgpalomino.blogspot.com/ 65 03/10/07
Slide 66: Funciones de carácter que devuelven valores de carácter REPLACE Sintaxis REPLACE(cadena,cad_busc[,cad_subst]) Propósito Devuelve cadena, reemplazando todas las apariciones de la cadena cad_busc con la cadena cad_subst Ejemplo:. select replace('Orlando','Orl','Hern') from dual; Resultado: Hernando http://luisgpalomino.blogspot.com/ 66 03/10/07
Slide 67: Funciones de carácter que devuelven valores de carácter RPAD Sintaxis RPAD(cadena1, x[,cadena2]) Propósito Devuelve la cadena1 rellena hacia la derecha con los caracteres de la cadena2. http://luisgpalomino.blogspot.com/ 67 03/10/07
Slide 68: Funciones de carácter que devuelven valores de carácter RPAD Ejemplos select RPAD('Orlando Valverde',18) from dual Resultado: Orlando Valverde select RPAD('Orlando Valverde',25,’XY’) from dual Resultado: Orlando ValverdeXYXYXYXYX


Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 8 (more)