4 Sentencias Ejecutables Copyright Oracle Corporation, 1998. All rights reserved. Objetivos Al ón usted á: Al final final de de esta esta lecci lección usted podr podrá: •• Reconocer Reconocer el el significado significado de de la la sección sección ejecutable ejecutable •• Escribir Escribir sentencias sentencias en en la la sección sección ejecutable ejecutable •• Describir Describir las las reglas reglas de de bloques bloques anidados anidados •• Ejecutar Ejecutar yy comprobar comprobar un un bloque bloque PL/SQL PL/SQL •• Utilizar Utilizar convenciones convenciones de de codificación codificación 4-2 Copyright Oracle Corporation, 1998. All rights reserved. Anatomía de un Bloque PL/SQL •• •• DECLARE DECLARE––Opcional Opcional ––Variables, Variables,constantes, constantes,cursores, cursores, excepciones excepcionesdefinidas definidaspor porelelusuario usuario BEGIN BEGIN––Obligatorio Obligatorio ––Sentencias SentenciasSQL SQL ––Sentencias Sentenciasde decontrol controlPL/SQL PL/SQL •• •• DECLARE BEGIN EXCEPTION EXCEPTION END; EXCEPTION––Opcional Opcional ––Acciones Accionesque quese seejecutarán ejecutaráncuando cuandose se DECLARE DECLARE produzcan errores produzcan errores v_variable VARCHAR2(5) v_variable VARCHAR2(5) END; – Obligatorio END; – Obligatorio BEGIN BEGIN SELECT column_name SELECT column_name INTO INTO v_variable v_variable FROM FROM table_name table_name END; END; 4-3 Copyright Oracle Corporation, 1998. All rights reserved. Sintaxis y Directrices del Bloque PL/SQL •• Las Las sentencias sentencias pueden pueden continuar continuar en en varias varias líneas. líneas. •• Las Las unidades unidades léxicas léxicas pueden pueden separarse separarse por por medio medio de de espacios: espacios: –– Delimitadores Delimitadores –– Identificadores Identificadores –– Literales Literales –– Comentarios Comentarios 4-4 Copyright Oracle Corporation, 1998. All rights reserved. Sintaxis y Directrices del Bloque PL/SQL Identificadores Identificadores •• Pueden Pueden contener contener hasta hasta 30 30 caracteres. caracteres. •• No No pueden pueden contener contener palabras palabras reservadas reservadas aa menos menos que que estén estén entre entre dobles dobles comillas. comillas. •• Deben Deben comenzar comenzar con con un un caracter caracter alfabético. alfabético. •• Su Su nombre nombre no no debería debería coincidir coincidir con con el el de de una una columna columna de de tabla tabla de de base base de de datos. datos. 4-5 Copyright Oracle Corporation, 1998. All rights reserved. Sintaxis y Directrices del Bloque PL/SQL Literales Literales •• Los Los literales literales de de fecha fecha yy de de caracteres caracteres deben deben estar estar entre entre comillas comillas simples. simples. v_ename v_ename := := 'Henderson'; 'Henderson'; •• Los Los números números pueden pueden ser ser valores valores simples simples o o una una notación notación científica. científica. 4-6 Copyright Oracle Corporation, 1998. All rights reserved. Código de Comentario •• Anteponga Anteponga aa los los comentarios comentarios de de una una sola sola línea línea dos dos guiones guiones ((- -) -) aa modo modo de de prefijo. prefijo. •• Coloque Coloque los los comentarios comentarios de de varias varias líneas líneas entre entre los los símbolos símbolos /* /* yy */. */. Ejemplo Ejemplo ... ... v_sal v_sal NUMBER NUMBER (9,2); (9,2); BEGIN BEGIN /* /* Compute Compute the the annual annual salary salary monthly monthly salary salary input input from from v_sal v_sal := := v_sal v_sal ** 12; 12; END; END; --- This This is is the the end end of of the the 4-7 based based on on the the user user the the */ */ transaction transaction Copyright Oracle Corporation, 1998. All rights reserved. Funciones SQL en PL/SQL •• Disponibles: Disponibles: –– Número Número de de una una fila fila –– Caracter Caracter de de una una fila fila –– Conversión Conversión de de tipos tipos de de datos datos –– Fecha Fecha } Igual que en SQL •• No No disponibles: disponibles: –– GREATEST GREATEST –– LEAST LEAST –– Funciones Funciones de de grupo grupo 4-8 Copyright Oracle Corporation, 1998. All rights reserved. Funciones PL/SQL Ejemplos Ejemplos •• Genere Genere la la lista lista de de direcciones direcciones de de una una empresa. empresa. v_mailing_address v_mailing_address := := v_name||CHR(10)|| v_name||CHR(10)|| v_address||CHR(10)||v_state|| v_address||CHR(10)||v_state|| CHR(10)||v_zip; CHR(10)||v_zip; •• Convierta Convierta el el nombre nombre del del empleado empleado aa minúsculas. minúsculas. v_ename v_ename 4-9 := := LOWER(v_ename); LOWER(v_ename); Copyright Oracle Corporation, 1998. All rights reserved. Conversión de Tipos de Datos •• Convierta Convierta datos datos aa tipos tipos de de datos datos comparables. comparables. •• La La existencia existencia de de tipos tipos de de datos datos mezclados mezclados puede puede ocasionar ocasionar un un error error yy afectar afectar al al rendimiento. rendimiento. •• Funciones Funciones de de conversión: conversión: –– TO_CHAR TO_CHAR –– TO_DATE TO_DATE –– TO_NUMBER TO_NUMBER 4-10 BEGIN BEGIN SELECT SELECT TO_CHAR(hiredate, TO_CHAR(hiredate, 'MON. 'MON. DD, DD, YYYY') YYYY') FROM FROM emp; emp; END; END; Copyright Oracle Corporation, 1998. All rights reserved. Conversión de Tipos de Datos Esta Esta sentencia sentencia produce produce un un error error de de compilaci ón. compilación. v_comment v_comment := := USER||': USER||': '||SYSDATE; '||SYSDATE; Para Para corregir corregir el el error error se se utiliza utiliza la la función función de de conversión conversión TO_CHAR. TO_CHAR. v_comment v_comment := := USER||': USER||': '||TO_CHAR(SYSDATE); '||TO_CHAR(SYSDATE); 4-11 Copyright Oracle Corporation, 1998. All rights reserved. Bloques Anidados y Ámbito de las Variables •• Las Las sentencias sentencias pueden pueden ser ser anidadas anidadas cuando cuando esté esté permitida permitida una una sentencia sentencia ejecutable. ejecutable. •• Un Un bloque bloque anidado anidado se se convierte convierte en en una una sentencia. sentencia. •• Una Una sección sección de de excepciones excepciones puede puede contener contener bloques bloques anidados. anidados. •• El El ámbito ámbito de de un un objeto objeto es es la la región región del del programa programa que que puede puede hacer hacer referencia referencia al al objeto. objeto. 4-12 Copyright Oracle Corporation, 1998. All rights reserved. Bloques Anidados y Ámbito de la Variable •• Un Un identificador identificador se se hace hace visible visible en en las las regiones regiones en en las las que que puede puede hacer hacer referencia referencia al al identificador identificador no no cualificado: cualificado: –– Un Un bloque bloque puede puede consultar consultar el el bloque bloque del del que que forma forma parte. parte. –– Un Un bloque bloque no no puede puede consultar consultar los los subbloques subbloques que que contiene. contiene. 4-13 Copyright Oracle Corporation, 1998. All rights reserved. Bloques Anidados y Ámbito de la Variable Ejemplo Ejemplo ... ... xx BINARY_INTEGER; BINARY_INTEGER; BEGIN BEGIN ... ... DECLARE DECLARE yy NUMBER; NUMBER; BEGIN BEGIN ... ... END; END; ... ... END; END; 4-14 Ámbito de x Ámbito de y Copyright Oracle Corporation, 1998. All rights reserved. Operadores de PL/SQL •• Lógico Lógico •• Arimético Arimético •• De De concatenación concatenación •• Paréntesis Paréntesis para para controlar controlar el el orden orden de de operaciones operaciones •• Operador Operador exponencial exponencial (**) (**) 4-15 Como en SQL Copyright Oracle Corporation, 1998. All rights reserved. Operadores de PL/SQL Ejemplos Ejemplos •• Aumente Aumente el el índice índice de de un un bucle. bucle. v_count v_count := := v_count v_count ++ 1; 1; •• Establezca Establezca el el valor valor de de un un indicador indicador booleano. booleano. v_equal v_equal := := (v_n1 (v_n1 == v_n2); v_n2); •• Valide Valide un un número número de de empleado empleado si si contiene contiene un un valor. valor. v_valid v_valid 4-16 := := (v_empno (v_empno IS IS NOT NOT NULL); NULL); Copyright Oracle Corporation, 1998. All rights reserved. Variables de Sustitución Para Para hacer hacer referencia referencia aa una una variable variable de de susticui ón en susticuión en PL/SQL PL/SQL debe debe anteponer anteponer aa su su nombre nombre dos dos puntos puntos (:) (:) aa modo modo de de prefijo. prefijo. Ejemplo Ejemplo :return_code :return_code := := 0; 0; IF IF credit_check_ok(acct_no) credit_check_ok(acct_no) THEN THEN :return_code :return_code := := 1; 1; END END IF; IF; 4-17 Copyright Oracle Corporation, 1998. All rights reserved. Directrices de Programación Facilite ódigo Facilite el el mantenimiento mantenimiento del del ccódigo •• Documentando Documentando el el código código con con comentarios. comentarios. •• Desarrollando Desarrollando una una convención convención de de mayúsculas/minúsculas mayúsculas/minúsculas para para el el código. código. •• Desarrollando Desarrollando convenciones convenciones de de nomenclatura nomenclatura para para los los identificadores identificadores yy otros otros objetos. objetos. •• Sangrando Sangrando para para facilitar facilitar la la lectura. lectura. 4-18 Copyright Oracle Corporation, 1998. All rights reserved. Convenciones de Nomenclatura del Código Evite üedad: Evite la la ambig ambigüedad: •• Los Los nombres nombres de de variables variables locales locales yy parámetros parámetros formales formales tienen tienen prioridad prioridad sobre sobre los los nombres nombres de de tablas tablas de de bases bases de de datos. datos. •• Los Los nombres nombres de de columnas columnas tienen tienen prioridad prioridad sobre sobre los los nombres nombres de de variables variables locales. locales. 4-19 Copyright Oracle Corporation, 1998. All rights reserved. Código de Sangrado Para Para obtener obtener mayor mayor claridad, claridad, sangre sangre cada cada nivel ódigo. nivel de de ccódigo. DECLARE DECLARE Ejemplo Ejemplo v_detpno NUMBER(2); v_detpno NUMBER(2); BEGIN BEGIN IF IF x=0 x=0 THEN THEN y=1; y=1; END END IF; IF; END; END; 4-20 v_location VARCHAR2(13); v_location VARCHAR2(13); BEGIN BEGIN SELECT SELECT deptno, deptno, location location INTO v_deptno, INTO v_deptno, v_location v_location FROM dept FROM dept WHERE WHERE dname dname == 'SALES'; 'SALES'; ... ... END; END; Copyright Oracle Corporation, 1998. All rights reserved. Determine el Ámbito de la Variable Ejercicio Ejercicio de de clase clase ... ... DECLARE DECLARE V_SAL V_SAL V_COMM V_COMM V_MESSAGE V_MESSAGE BEGIN BEGIN ... ... NUMBER(7,2) NUMBER(7,2) := := 60000; 60000; NUMBER(7,2) NUMBER(7,2) := := V_SAL V_SAL // .20; .20; VARCHAR2(255) VARCHAR2(255) := := ‘‘ eligible eligible for for commission’; commission’; DECLARE DECLARE V_SAL NUMBER(7,2) V_SAL NUMBER(7,2) := := 50000; 50000; V_COMM NUMBER(7,2) V_COMM NUMBER(7,2) := := 0; 0; V_TOTAL_COMP NUMBER(7,2) V_TOTAL_COMP NUMBER(7,2) := := V_SAL V_SAL ++ V_COMM; V_COMM; BEGIN ... BEGIN ... V_MESSAGE V_MESSAGE := := ‘CLERK ‘CLERK not’||V_MESSAGE; not’||V_MESSAGE; END; END; V_MESSAGE V_MESSAGE := := ‘SALESMAN’||’V_MESSAGE; ‘SALESMAN’||’V_MESSAGE; END; END; 4-21 Copyright Oracle Corporation, 1998. All rights reserved. Resumen •• Los Los bloques bloques PL/SQL PL/SQL se se componen componen de de las las siguientes siguientes secciones: secciones: –– Declarativa Declarativa (opcional) (opcional) –– Ejecutable Ejecutable (necesaria) (necesaria) –– Gestión Gestión de de excepciones excepciones (opcional) (opcional) DECLARE •• Estructura Estructura del del bloque bloque PL/SQL: PL/SQL: –– Bloques Bloques anidados anidados yy reglas reglas de de ámbito ámbito BEGIN –– Bloques Bloques de de ejecución ejecución EXCEPTION END; 4-22 Copyright Oracle Corporation, 1998. All rights reserved. Resumen •• Programación Programación PL/SQL: PL/SQL: –– Símbolos Símbolos –– Funciones Funciones –– Conversiones Conversiones de de tipos tipos de de datos datosDECLARE 4-23 –– Operadores Operadores BEGIN –– Variables Variables de de sustitución sustitución EXCEPTION –– Convenciones Convenciones yy directrices directrices END; Copyright Oracle Corporation, 1998. All rights reserved. Visión General de la Práctica •• Revisión Revisión de de reglas reglas de de anidamiento anidamiento yy ámbito ámbito •• Desarrollo Desarrollo yy prueba prueba de de los los bloques bloques PL/SQL PL/SQL 4-24 Copyright Oracle Corporation, 1998. All rights reserved.