INST Estándar Codificación SQL y PL-SQL

Documentos relacionados
Diseño de bases de datos

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

- Bases de Datos - - Diseño Físico - Luis D. García

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Restricciones de Integridad

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Bases de Datos: Structured Query Language (SQL)

Tema 1. Bases de datos activas

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Práctica 3. Consultas SQL

TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

Disparadores en Oracle (Ejemplos Prácticos)

OPTIMIZACIÓN DE CONSULTAS EN SQL. Análisis de Consultas y Transacciones Ajuste de Indices Ajuste de Consultas

Un ejemplo teórico de trigger podría ser éste:

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Oracle Básico PL/SQL

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

5- Uso de sentencias avanzadas

Modulo 1 El lenguaje Java

Oracle 12c DISEÑO Y PROGRAMACIÓN

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

PRÁCTICA III. DISPARADORES EN SQL (II)

Otros objetos de Base de Datos

Formato para prácticas de laboratorio

Trabajos de Ampliación. Bases de datos NoSQL.

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

6 - Recuperar algunos registros (where)

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

2. Almacén. 2.1 Paso a Histórico a Fecha. 2.2 Mantenimiento de Productos Ocultar datos

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Base de datos relacional

Tablas internas 1-12

Programación SQL. Lucio Salgado Diciembre 2008

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

Laboratorio Informix. Stored Procedures Triggers

Bases de Datos 2. Teórico

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

SQL Los fundamentos del lenguaje

T12 Vistas y tablas temporales

Base de datos Lenguaje SQL

TEMA 20: CONCEPTOS BÁSICOS DE SQL

Conceptos Avanzados de Bases de datos

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Formatos para prácticas de laboratorio

Resumen. El rol del lenguaje SQL en los SGBDR y en la Relacional. cjimenez@inf.udec.cl, tamrstro@inf.udec.cl

1. DML. Las subconsultas

Haga clic para PostgreS cambiar el estilo

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

Centro de Capacitación en Informática

CONSULTAS BASICAS EN SQL SERVER

1

Configuración Parámetros Inventario

Oracle básico (IV): Programación en PL/SQL

BASES DE DATOS - SQL. Javier Enciso

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

- Access es un gestor de bases de datos relacionales gráfico e interactivo.

Base de Datos Práctica 1.

Consultas con combinaciones

Base de datos I Facultad de Ingeniería. Escuela de computación.

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

Uso de Jobs en Oracle. Establecer los lineamientos necesarios para el manejo de tareas programadas jobs en la Base de Datos Oracle.

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

PL/PGSQL. Extensión "procedural" de SQL

CAPÍTULO III MARCO TEÓRICO. Cada día cambian las condiciones de los mercados debido a diferentes factores como: el

A.1. Definiciones de datos en SQL

PRÁCTICA B2. Definición y modificación de datos en SQL

ÍNDICE PRIMERA PARTE... 17

Constraints (Restricciones) Copyright Oracle Corporation, All rights reserved.

Integridad en sistemas de bases de datos relacionales

Restricciones (constraints) FOREIGN KEY

Ref.: Normas - ST.10/C página: NORMA ST.10/C PRESENTACIÓN DE LOS COMPONENTES DE DATOS BIBLIOGRÁFICOS

Tema 1. Bases de datos activas

Tabla de contenido. Manual B1 Time Task

Sub consultas avanzadas

Minitab License Manager powered by FLEXnet Administración de licencias multiusuarios para los productos de software Minitab

Conectar Flash con Access usando MDM Zinc

BASE DE DATOS RELACIONALES

Estándares de Programación en ORACLE

LINEAMIENTOS GENERALES TRABAJO DE GRADO OPCIÓN EMPRENDIMIENTO

7 Contabilidad General

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Son objetos cuya función es el tratamiento de varios registros exclusivamente durante la ejecución de un programa.

PL/SQL. DECLARE /* Parte Declarativa */ BEGIN /* Parte de Ejecución */ EXCEPTION /* Parte de Excepciones */ END;

Referencia SQL en la versión de HUGOSQL White Paper por: HUGOSQL 2012

Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Diseño Lógico. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

Lenguaje para descripción de datos

MANUAL DE USUARIOS DEL MODULO DE EVALUACIÓN DE DESEMPEÑO SISTEMA DE ADMINISTRACIÓN DE SERVIDORES PÚBLICOS (SASP)

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Transcripción:

INST Estándar Codificación SQL y PL-SQL Convenciones de nombres y estándares de codificación para SQL y PL/SQL Objetivo: Establecer pautas para estandarizar los nombres de objetos Oracle y la confección de código SQL y PL/SQL, para lograr: código fácil de entender y, por lo tanto, de mantener (claridad) simplificar la decisión al momento de establecer nombres uniformidad en el criterio utilizado por todos los integrantes de SziCom Convención de nombres de objetos: General: Todos los nombres de objetos de la base de datos se deberán escribir en mayúsculas. Se utilizarán guiones bajos (_) para separar palabras. Se evitarán, en lo posible, las abreviaturas. Tablas: Se han adoptado algunas nomenclaturas para prefijar los nombres de las tablas: Prefijo Significado Ejemplo NTC_ Nominación Transporte Cliente DESPACHO.NTC_NOMINACION DCG_ Desbalance Cliente Gas DESPACHO.DCG_AJUSTE_INYECCION DCL_ Desbalance Cliente DESPACHO.DCL_AJUSTE_CONSUMO ABI_ Tablas que se alimentan directamente con datos del ABI de TGN ABI_BAL, ABI_COMPENSACION SPAC_ Tablas que se alimentan directamente con datos del SPAC de TGS SPAC_ASIGNACION_PUNTO MV_ Tablas Snapshot de vistas materializadas MV_CONSUMO Toda tabla deberá tener un breve comentario que describa su contenido. Columnas: Nombre del objeto Comentario Ejemplo ID_nombre_tabla Prefijo ID (aplica a campos enteros) ID_CLIENTE; ID_PUNTO FH_acción Prefijo FH indica fecha y hora FH_ENVIADO NOMINADO Implica el prefijo VOLUMEN NTC_NOMINACION.NOMINADO Toda columna deberá tener un breve comentario explicativo. Otras convenciones: Los campos que correspondan a valores del tipo SI/NO, VERDADERO/FALSO, se definirán como CHAR(1) y luego mediante una constraint se limitará el contenido a las letras S o N. Los campos que registren el usuario Oracle que realizó la acción, se denominarán USUARIO, serán del tipo VARCHAR2(32), pudiendo o no tener como default: USER. Los campos Año se denominarán ANIO y se definirán como NUMBER(4). Cuando una columna refiera al ID de otra tabla (FOREIGN KEY), deberá tener (en lo posible) el mismo nombre que el campo ID de la tabla referenciada. Esto facilita que muchas herramientas de generación de diagramas establezcan de manera automática las relaciones entre tablas. Todo campo "tipo" que tenga más de 3 (tres) estados posibles deberá transformarse en un campo ID que deberá referenciar a una tabla TIPO_X convenientemente creada a tal efecto.

Constraints: El espacio de nombre de las contraints es el del esquema. Prefijo Significado Ejemplo PK_xxx Clave primaria, xxx es el nombre de la tabla PK_CLIENTE UK_xxx_yyy Indice único sobre la tabla xxx y los campos yyy UK_CLIENTE_NEMONICO FK_xxx_yyy Foreign Key de la tabla xxx columna yyy FK_CESION_ID_CAMARA NN_xxx_yyy El campo yyy de la tabla xxx no puede ser nulo NN_CLIENTE_FECHA_ALTA POS_xxx_yyy El campo yyy de la tabla xxx debe ser positivo TRANSPORTE.POS_TARIFA_TARIFA_FIRME SN_xxx_yyy El campo yyy de la tabla xxx debe contener S o N DESPACHO.SN_NOMINACION_VERSION_CERRADA CHK_xxx_yyy El campo yyy de la tabla xxx debe cumplir el CHECK CHK_BALANCE_MES_MES Se recomienda no crear las constraints en el comando SQL CREATE TABLE, ya que éstas se generan como System Named. Si se utiliza el TOAD, no utilizar las columnas PK y NOT NULL de la grilla de armado de tablas, ya que las constraints resultantes se generan como System Named. Triggers: La primera letra del nombre indicará el momento en que disparará el trigger: B Before (Antes) A After (Después) Agregado de la letra S Si se trata de un trigger BEFORE o AFTER STATEMENT, si no se indica se supone FOR EACH ROW. Luego, las siguientes letras indicarán en el orden que se expone, qué acciones sobre la tabla involucrada disparán los triggers: I Insert U Update D Delete A continuación, el nombre de la tabla correspondiente. Nombre BIU_TARIFA BSIUD_TARIFA AIU_TARIFA Significado Before Insert/Update (for each row) en la tabla TARIFA Before Statement Insert/Update/Delete en la tabla TARIFA After Insert/Update (for each row) en la tabla TARIFA Secuencias: Se prefijará SEQ_ y luego se indicará el nombre de la tabla que tiene uno o más triggers que a su vez utilizan la secuencia. SEQ_CAMARA_BALANCE SEQ_GNC_CONTRATO_GAS Packages: Se prefijará PK_ y luego se indicará con una o más palabras el ámbito al que corresponde el package. PK_NOMINACION PK_CONTROL_FACTURACION PK_CONTRATO

PK_VENTANA Vistas: Los nombres de las vistas se prefijarán según el siguiente criterio: Prefijo V_ VA_ MV_ VD_ X_, XX_ Significado Vista estándar Vista de valores acumulados Vista materializada Vista para desnormalizar tablas Vistas intermedias, utilizadas por lo general para no incluir subquerys en la vista final Al momento de redactar las vistas: Introducir un breve comentario explicativo, a renglón siguiente de la cláusula SELECT y antes de comezar a enumerar los campos. Prefijar las tablas/vistas utilizadas en la selección, con el esquema al que pertenecen. Cuando se trate de joins de tablas o vistas, establecer alias y utilizarlos al referenciar los campos, tanto en la cláusula SELECT como en las clásulas WHERE, ORDER BY o GROUP BY. Estándares de codificación para SQL y PL/SQL: Notación: Prefijo Significado Ejemplo p Parámetro de función/procedimiento pid_cliente, pdia_operativo v Variable local al procedimiento/función vcont, vfecha_desde g Variable global del package gdia_operativo k Constante kid_mercado_gu, kid_distco c Cursor cclientes_activos e Variable del tipo EXCEPTION eno_vigente r Registro, fila de un cursor, tupla rcliente_activo t Tipo tarr_nominacion a Array anominacion Comentarios: Cabecera de métodos: Es obligatorio escribir un comentario en la cabecera de un método (procedimiento o función). Se debe indicar al inicio del comentario las iniciales del programador que creó o modificó el método. El comentario no debe exceder las 2 líneas. Si se requiere más detalle se deberá recurrir a la especificación que motivó la creación o cambio del método, que seguramente tendrá el contexto. Historial de cambios: limitarlos a una línea por cambio y si una línea no es suficiente, hacer referencia al requerimiento (issue) que dio origen al cambio. Si son varios issues se indicarán.

-- Replicar el contrato para el cliente con los mismos servicios y la misma vigencia -- Autor. CSZ (20/12/2009)-Tomado de la version 2. -- Modif. ACM (20/01/2009)-Replicar adecuadamente las tarifas y replicar volumenes. -- RAV (02/02/2009)-Issue DESPACHO-153. Nota: Este tipo de comentario dejará de utilizarse cuando se implemente svn para Oracle. Comentarios en un bloque interno de código: Valen las mismas consideraciones que para los comentarios de cabecera. Por ejemplo: descripción de un cursor. Comentarios adicionales: Corresponden a información que no es evidente, que no se puede deducir del comentario estandar y que el programador considera importante. -- Controlar que no se haya creado antes la misma cesión. -- Recorremos la lista de clientes que reciben, asignando hasta terminar el excedente Pautas generales: Nombrar los objetos de cada esquema con el prefijo del esquema, aunque sea redundante. SELECT ID_CLIENTE, NEMONICO FROM CI.CLIENTE vfirme_contratado := CI.PK_CONTRATO.FIRME_CONTRATADO; Utilizar tipo de variables enteras cuando los operandos sean enteros y el resultado un entero (PLS_INTEGER). Evitar el uso de "Números mágicos". Definir constantes con nombres representativos, prefijadas con k. Evitar el uso de EXIT o RETURN para salir de un ciclo FOR o WHILE. Utilizar nombres de variables en los ciclos que aporten mayor información que el simple uso de I, J, K, etc. -- Cuando no es un simple conteo de iteraciones... FOR vmes IN 1..12 LOOP -- Cuando se trata de un registro de un cursor... FOR rcliente IN cclientes_activos LOOP Todo procedimiento o función deberá incluirse en un package afin. Escribir el nombre del procedimiento o función en el END de cierre (permite diferenciarlo fácilmente de otros ENDs del código).

END BORRAR_APERTURA_NTC_NOM_CLIE; Longitud máxima para un procedimiento/función/trigger: 30 líneas de código. Evitar el uso de IF para asignar valores a variables booleanas. -- Usar: vvencido := vfecha_hasta <= vfecha_limite; -- En lugar de: IF vfecha_hasta <= vfecha_limite THEN vvencido := TRUE; ELSE vvencido := FALSE; END IF; Utilizar variables booleanas para mejorar la legibilidad. velegible_para_aumento := remp.salario BETWEEN 10000 AND 50000 AND ESTADO_EMPLEADO(rEMP.ID_EMPLEADO) = 'N' AND MONTHS_BETWEEN (remp.fecha_alta, SYSDATE) > 10; IF velegible_para_aumento THEN DAR_AUMENTO(rEMP.ID_EMPLEADO); END IF; Indentación (ejemplos): Al definir variables: vversion PLS_INTEGER; vid_tipo_consumo PLS_INTEGER; vclave VARCHAR2(255); etipo_consumo EXCEPTION; eversion EXCEPTION; vfh_proceso DATE; vdesde DATE; vhasta DATE; vtipo VARCHAR2(12);

Al escribir DMLs: SELECT CL.ID_CLIENTE, CL.NEMONICO, CT.ID_CONTRATO, CT.FECHA_INICIO, CT.FECHA_FIN FROM CI.CLIENTE CL, CI.CONTRATO CT WHERE CL.ID_CONTRATO = CT.ID_CONTRATO AND CT.FECHA_FIN < SYSDATE; INSERT INTO BALANCE.LOG_PROCESO ( FH_PROCESO, ID_PROCESO, ID_TIPO_ERROR, DETALLE) VALUES ( SYSDATE, vproceso, verror, vdetalle); UPDATE CI.CESION_DIA SET APERTURA_NOMINADO = NOMINADO, APERTURA_AUTORIZADO = AUTORIZADO, ASIGNADO = NULL WHERE DIA_OPERATIVO = vdia_operativo AND ID_CESION IN (SELECT C.ID_CESION FROM CI.V_CESION C WHERE C.ID_CLIENTE_RECIBE = vid_cliente); DELETE BALANCE.CONSUMO_LOCALIDAD WHERE ANIO = vanio AND MES = vmes AND VERSION = vversion AND ID_LOCALIDAD = TC.ID_LOCALIDAD AND ID_TIPO_CONSUMO = vid_tipo_consumo; Al escribir IFs:

IF a = 1 AND ( b = 2 OR c = 3 OR d = 4 ) THEN accion_verdadero ELSE accion_falso END IF; Al asignar valores: vexcedente := vexcedente + GREATEST(0, TC.VOLUMEN); vfaltante := vfaltante - LEAST(0, TC.VOLUMEN); Al definir procedimientos o funciones: -- Breve comentario explicativo FUNCTION AUTORIZADO_INICIAL (psolicitado PLS_INTEGER, pfirme PLS_INTEGER, pgas_total PLS_INTEGER, ptiene_ti PLS_INTEGER) RETURN PLS_INTEGER IS Manejo de los errores - Excepciones: Texto en las excepciones: Si el mensaje hace referencia a un objeto que causa el error, el objeto debe estar identificado por el nombre. 'No está definido el punto ' vnombrepunto ' en la tabla RED.PUNTO'