SlideShare a Scribd company logo
1 of 38
ProcedimientosAlmacenados(stored procedures) Un procedimiento almacenado se puede definir como un programa, procedimiento ó función, el cual está almacenado en la base de datos y listo para ser usado. Utilizar parámetros de salida : Si se ejecuta una consulta de SQL ad hoc que devuelve una sola fila, debes utilizar un conjunto de resultados. Un procedimiento almacenado ofrece la posibilidad de utilizar parámetros de salida, lo que resulta ser mucho más rápido. Si ejecutas sólo una consulta, no notarás la diferencia, pero si ejecutas la consulta siguiente 2000 veces, es probable que ganes mucho devolviendo @key como parámetro de salida en lugar de un conjunto de resultados. Manejar las dependencias : En un sistema complejo que incluye unos centenares de tablas, muchas veces quieres saber dónde se usa una tabla o columna determinada, por ejemplo si quieres cambiar una columna de alguna manera. Si todo el código está en procedimientos almacenados, sólo se tiene que buscar en el texto de los procedimientos para encontrar las referencias. Si envías instrucciones SQL directamente desde la aplicación, se debe buscar en una cantidad mayor de código, y si el nombre de la columna tiene un nombre común la tarea puede ser casi imposible. Establecer bloques de lógico: permite  esconder los detalles de las base de datos dentro de los procedimientos, así que se convierten en una capa de abstracción.
ProcedimientosAlmacenados Permisos:Un procedimiento almacenado es la solución clásica para manejar el acceso de los usuarios a los datos.  Un usuario no debería tener los permisos para ejecutar SELECT, INSERT, UPDATE y DELETE directamente Almacenar los planes de consulta en la caché: Otra ventaja importante de los procedimientos almacenados es el rendimiento. Cuando un procedimiento almacenado se ejecuta por la primera vez, los motores de DB crea un plan de consulta y lo almacena en la caché para poder reutilizarlo en el futuro. Reducir el tráfico en la red: El tráfico en la red también afecta el rendimiento de las aplicaciones. Poner esta consulta en un procedimiento reduce la cantidad de bytes que se transmite por la red, lo que puede mejorar el rendimiento si hay mucho tráfico. La diferencia es aún más evidente cuando tienes una serie de instrucciones SELECT/INSERT/UPDATE interrelacionadas. Un procedimiento almacenado te permite utilizar tablas temporales o variables de tabla para procesar todos los datos en el servidor. En caso de utilizar instrucciones de SQL ad hoc(Cliente), “se tiene que enviar todos los datos entre el servidor y el cliente o la capa intermedia” esto se puede resolver creando tablas temporales sin un procedimiento almacenado, - pero se puedes tener problemas con el connectionpooling y los conjunto de registro -.
ProcedimientosAlmacenadosPostgres Un procedimiento almacenado en PostgreSQL se puede escribir en multiples lenguajes de programación. En una instalación por defecto de PostgreSQL podremos tener disponibles los siguientes lenguajes: PL/pgSQL, PL/Perl, PL/Tcl y PL/Python. El único lenguaje que está disponible automáticamente es PL/pgSQL. Para utilizar PL/Perl, PL/Tcl o PL/Python tendremos que haber configurado/compilado PostgreSQL con estos parámetros --with-perl --with-tcl --with-python. Tambien existen muchos otros lenguajes disponibles como módulos adicionales, entre ellos, PL/Java, PL/PHP, PL/R, PL/Ruby, PL/Sheme y PL/sh, pero estos tienen que descargarse e instalarse por separado . PL/pgSQLes muy parecido al lenguaje PL/SQL utilizado por Oracle, Los objetivos de PL/pgSQL cuando se creo fueron: Poder ser usado para crear funciones y disparadores (triggers) Añadir estructuras de control al lenguaje SQL Poder realizar cálculos complejos Heredar todos los tipos, funciones y operadores definidos por el usuario Poder ser definido como un lenguaje "de confianza" Fácil de usar
ProcedimientosAlmacenadosPostgres PL/pgSQLes un lenguaje estructurado en bloques. Como mínimo tendremos un bloque principal en nuestro procedimiento almacenado y dentro de este podremos tener subbloques.  CREATE OR REPLACE FUNCTION ejemplo_txt(integer, integer) RETURNStext AS $$ DECLARE numero1 ALIAS FOR $1;  numero2 ALIAS FOR $2;  constante CONSTANTinteger := 100; resultado INTEGER;  resultado_txtTEXT DEFAULT 'El resultado es 104'; BEGIN  resultado := (numero1 * numero2) + constante; IF resultado <> 104  THENresultado_txt := 'El resultado NO es 104'; END IF;  RETURNresultado_txt;  END;  $$ LANGUAGEplpgsql;
Tablasparticionadas Normalmente las tablas particionadas se crean por que  las tablas tiene un gran tamaño ademas del  gran número de inserciones diarias. Permitiendo un esquema de organización de los datos en la tabla. Cuando hay  grandes conjuntos de datos, las operaciones frecuentes de mantenimiento (estas se realizan en los datos estáticos) puede tener efectos costosos, tales como problemas de rendimiento, problemas de bloqueo, las copias de seguridad (espacio, tiempo y costos operativos), así como un impacto negativo en la escalabilidad global del servidor. Las busquedasmediante índices globales tiene un pobre desempeño ya que se revisan toda la tabla. Las tablas particionadas permite dividir los datos dentro de múltiples objetos de almacenamiento llamados particiones de datos o rangos de acuerdo con los  valores en una o mas columnas de la tabla. Las tablas particionadas mejorar la escalabilidad y manejabilidad de las tablas grandes y las tablas que tienen diferentes patrones de acceso como las fechas. Cada partición de datos se puede almacena por separado.  .
Tablasparticionadas proceso de consultas también pueden tomar ventaja de la separación de los datos para evitar la exploración de datos irrelevantes. Con el uso de índices que incluyen las columnas de partición se reduce el ámbito de busqueda y con ello se mejora la rapidez. Las particiones de tablas dan la posibilidad de ser truncadas por separado y por ello son usadas muy a menudo en tablas donde la validez de sus datos están sujetos a fechas donde el truncate de una partición no afecta al total de la tabla. las particiones  se dividen en una partición activa y las de archivado.  si una tabla grande existe en un sistema con varias CPU, la partición de la tabla puede llevar a un mejor desempeño a través de operaciones paralelas. El rendimiento de las operaciones a gran escala a través de conjuntos de datos extremadamente grandes (por ejemplo, millones de filas) se pueden beneficiar mediante la realización de múltiples operaciones en paralelo. Cada N días se trunca mediante un job la partición que será la particionactiva para realizar inserts, de esta manera las otras particiones se mantendrán intactas, manteniendo así un histórico de datos para consultas limitadas por fechas y provocando menor movimiento de bloques de memoria y la desfragmentación causada por inserción o borrado de datos. .
TablasparticionadasPostgresql En postgresql el tipo de partitioning soportado se denomina particionado mediante herencia de tablas. Cada partición puede ser creada como una tabla hija de una unica tabla padre. La tabla padre normalmente debe de ser una tabla vacia, que representara a todo el conjunto de datos. Los dos tipos de particionado mas comunes en postgresql son:    1. Particionar por rangos. La tabla es particionada mediante rangos definidos en base a la columna de clave primaria o cualquier columna que no se solape entre los rangos de valores asignados a diferentes tablas hijas.    2. Particionar por lista. La tabla es particionada listando los valores de cada una de las claves en cada particion. .
TablasparticionadasPostgresql En postgresql para poder utilizar dicha técnica es necesario seguir algunos pasos:    1. Crear la tabla "maestra", de la cual todas las tablas hijas heredaran. Esta tabla no contendra datos, no debe de tener ningun tipo de restricción (check), no debe de tener indice ni nada por el estilo.    2. Crear todas las tablas hijas heredando de la tabla maestra. Por lo regular estas tablas heredaran todos los campos de la tabla padre y no es necesario crearlos nosotros mismos.    3. Agregar a todas las tablas hijas las restricciones correspondientes sobre los datos que albergaran. Algunos ejemplos de esto serian: CHECK ( pais IN ('México', 'Argentina')), CHECK ( id_cliente BETWEEN 100 AND 200 ) ... CHECK ( id_cliente BETWEEN 5000 AND 5200), estos dos ultimos ejemplos son para evitar traslapes entre los ids de clientes.    4. Para cada particion, crear un indice para la columna(s) Clave, tambien se pueden poner los indices que a cada quien le convengan. El indiceclave primaria no es estrictamente necesario, pero en la mayoria de los casos ayuda mucho. Si se nesecita una clave  unica o clave primaria,  esta se necesitaras crear para cada tabla hija.    5. Definir una regla (RULE) o trigger para redirigir las modificaciones de la tabla padre (master) a la apropiada particion.    6. Verificar que este habilitado a on el parametroconstraint_exlusion (SET constraint_exclusion = on;) en el archivo de configuracionpostgresql.conf para que los querys sean optimizados para el partitioning. .
TablasparticionadasPostgresql CREATE TABLE produccion(id int not null, no_serieint, id_modeloint, id_personalint, fecha_fabricacion date, fecha_salida  date); particionaremos en base al modelo del producto fabricado. SELECT * from modelos order by id; id | modelo | caracteristicas | descripcion | imagen -+  1 | ODIN | 5 litros por minuto | calentador de paso | 2 | DELTA 01 | 7 litros por minuto | calentador de paso |  3 | DELTA 01-PLUS | 9 litros por minuto | calentador de paso | 4 | DELTA 02 | 13 LITROS POR MINUTO | CALENTADOR DE PASO | Crear las tablas hijas heredadas de la tabla "produccion", aqui es donde se crean las restricciones (CHECK) para los datos que albergaran cada tabla hija. CREATE TABLE produccion_odin ( CHECK (id_modelo = 1) ) INHERITS (produccion); CREATE TABLE produccion_delta01 ( CHECK (id_modelo = 2) ) INHERITS (produccion); CREATE TABLE produccion_delta01plus ( CHECK (id_modelo = 3) ) INHERITS (produccion); CREATE TABLE produccion_delta02 ( CHECK (id_modelo = 4) ) INHERITS (produccion); Creacion clave primariapara agilizar la busqueda de registros o garantizar la unicidad de los mismos. ALTER TABLE produccion_odin ADD PRIMARY KEY (id); Creacion de indices los cualespordefecto son B-TREE CREATE INDEX produccion_odin_id ON produccion_odin (id);    CREATE INDEX produccion_delta01_id ON produccion_delta01 (id); CREATE INDEX produccion_delta01plus_id ON produccion_delta01plus (id);   CREATE INDEX produccion_delta02_id ON produccion_delta02 (id); .
TablasparticionadasPostgresql Bien, ahora procederemos a crear el juego de reglas para garantizar el llenado en cascada de los datos y que cuando estos caigan en la tabla maestra sean redirigidos a sus respectivas tablas. . -- Regla para produccion_odin CREATE RULE produccion_odin_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 1 ) DO INSTEAD INSERT INTO produccion_odin VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta01 CREATE RULE produccion_delta01_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 2 ) DO INSTEAD INSERT INTO produccion_delta01 VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta01plus CREATE RULE produccion_delta01plus_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 3 ) DO INSTEAD INSERT INTO produccion_delta01plus VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta02 CREATE RULE produccion_delta02_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 4 ) DO INSTEAD INSERT INTO produccion_delta02 VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida);
TablasparticionadasPostgresql Se procede a crearuna vista quecontendratodos los valores, talcomosi se tratase de unatablaenorme: CREATE VIEW produccion_total AS SELECT * FROM produccion_odin UNION ALL SELECT * FROM produccion_delta01 UNION ALL SELECT * FROM produccion_delta01plus UNION ALL SELECT * FROM produccion_delta02; Con esto se tiene un esquema de tablas particionadas, para terminar se habilita el obtimizador de consultas para evitar la busqueda de algun dato en todas las particiones Para configurar desde psql: SET constraint_exclusion = on; o modificando el postgresql.conf de la siguiente manera, anexando la siguiente linea: constraint_exclusion = on .
Disparadores(TRIGGERS) Un trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación.  Los triggers pueden definirse para las operaciones de inserción (INSERT), actualización (UPDATE) o borrado (DELETE) y pueden ejecutarse antes o después de la operación. Ventajas: ,[object Object]
Logs automáticos de cambios a las tablas. Una aplicación puede guardar un registro corriente de cambios, creando un trigger que se dispare siempre que una tabla se modifique.
La notificación automática de cambios a la Base de Datos con alertas de evento en los triggers.
Crear un registro de auditoría de la actividad en la base de datos. Por ejemplo, se puede seguir los cambios a la tabla de pedidos mediante la actualización de la información que corrobora a una mesa de auditoría. Aplicar una regla de negocio. Por ejemplo, puede determinar cuándo una orden supera el límite de crédito del cliente y mostrar un mensaje en este sentido. Obtener datos adicionales que no está disponible dentro de una tabla o dentro de la base de datos.Porejemplo, cuando se produzca una actualización a la columna de cantidad de la tabla de elementos,puedecalcular el ajuste correspondiente a la columna precio_total. Exigir la integridad referencial. Cuando se elimina un cliente, por ejemplo, puede utilizarun disparador para eliminar las filas correspondientes (es decir, las filas que tienen el mismo ID_Cliente ) en la tabla de pedidos.,[object Object]
EjemploTransaccionesautónomas  En ocasiones es necesario que los datos escritos por parte de una transacción sean persistentes a pesar de que la transacción se deshaga con un ROLLBACK. Es muy común que, por ejemplo, en caso de que se produzca algún tipo de error queramos insertar un registro en una tabla de log con el error que se ha produccido y hacer ROLLBACK de la transacción. Pero si hacemos ROLLBACK de la transacción tambien se realiza una INSERT a un LOG. Quedando el error en la tabla de log, pero las acciones de la transacción principal retornarían a su estado anterior. Utilizacion Mecanismo de Logging (log de seguimiento ) Contador de Intentos Medidor de uso del software (registrar la llamada a la aplicacion independientemente que la transacción realice commit o rollback)  Componentes reusables(la posibilidad de ofrecer unidades independientes de trabajo (también conocidas como cartridges) que realicen su tarea sin efecto sobre el ambiente que lo llama) No, pero puedes emularlo usando dblink o algún otro mecanismo dentro de una función para establecer una segunda conexión a la BD, y hacer cosas en esa otra conexión.
EjemploTransaccionesautónomas CREATE OR REPLACE FUNCTION fn_log_error(p_functionvarchar, p_locationint, p_errorvarchar) RETURNSvoid AS $$ DECLARE v_sqlvarchar; v_returnvarchar;  v_errorvarchar;  BEGIN      PERFORMdblink_connect(‘NombreConexion', 'dbname=...');  v_sql := 'INSERT INTO error_log (function_name, location, error_message, error_time) ‘      || 'VALUES (''' || p_function_name || ''', '       || p_location || ', ''' || p_error || ''', clock_timestamp())';  SELECT INTO v_return *  FROMdblink_exec('NombreConexion', v_sql, false);       --Obtiene el mensage de error SELECT INTO v_error *  FROMdblink_error_message('NombreConexion');   IF position('ERROR' in v_error) > 0 OR position('WARNING' in v_error) > 0 THEN RAISE EXCEPTION '%', v_error;      END IF; PERFORMdblink_disconnect('NombreConexion');  EXCEPTION WHENothersTHEN  PERFORMdblink_disconnect('NombreConexion');  RAISE EXCEPTION '(%)', SQLERRM; END; $$ LANGUAGEplpgsqlSECURITYDEFINER;
vistas materializadas o materializedviews Almacenan la definición de la vista propiamente dicha,  Almacenan los registros que resultan de la ejecución de la sentencia SELECT que define la vista.  los resultados se almacenan físicamente constituyendo una tabla real que ocupa espacio en el disco duro.  Si una vista (view) utiliza muchas tablas base enlazadas de forma compleja, y dicha vista va a ser utilizada frecuentemente, será muy conveniente definirla como una vista materializada.  Las materializedviewmejorar el rendimiento de la base de datos, ya que la sentencia SQL base de la vista sólo se ejecutará una vez. Si se reutilizarse en el futuro, se necesita un mecanismo para actualizar o refrescar dicha vista materializada, ya que las tablas base de la vista pueden haber sufrido modificaciones desde la creación de la misma.
vistas materializadas o materializedviews Se comporta como un punto de vista. Es decir, los datos de la tabla cambia cuando los datos en las tablas subyacentes tienen cambios.  tipos de vistas materializadas: Instantánea(Snapshot) son las más simples de implementar. Ellos sólo se actualizan cuando se actualiza de forma manual.  Ansioso(Eager) se actualizan tan pronto como cualquier cambio se realiza en la base de datos que lo afectan.  Perezoso(Lazy) se actualizan cuando se confirma la transacción.  Muy perezoso(VeryLazy)  son funcionalmente equivalentes a los Snapshot. La única diferencia es que los cambios se registran de forma incremental y son aplicado cuando la tabla se actualiza de forma manual. 
vistas materializadas o materializedviews algunas consultas son muy lentas. Es posible que se haya   gotado todas las técnicas estándar acelerar lasconsultas.  Se nesecitan la reestructuración completa de los datos. Lo que terminan haciendo es almacenar bits de pre-consulta de información  para  no tener  que ejecutar la consulta  cuando se necesita los datos. Normalmente, esto se le  llama "caché" fuera del mundo de bases de datos. Desarrollo de  una vista materializada CREATE TABLEmatviews (  mv_nameNAME NOT NULL PRIMARY KEY ,  v_nameNAME NOT NULL ,  last_refreshTIMESTAMP WITH TIME ZONE );  Las columnas son : mv_name: el nombre de la vista materializada .v_name: el nombre de la vista en la queestabasada la vista materializada. last_refresh: es la ultimavez(tiempo) en que la vista materilizadafueactulizada.
vistas materializadas o materializedviews Funcioncreate_matview  esta función revisa si hay una vista materializada con ese nombre . Si es así, se produce una excepción. De lo contrario, crea una nueva tabla de la vista, e inserta una fila en la tabla matviews .. CREATE OR REPLACE FUNCTION create_matview(NAME, NAME) RETURNS VOID  SECURITY DEFINER  LANGUAGE plpgsql AS '  DECLARE  matviewALIAS FOR $1;  view_nameALIAS FOR $2;  entrymatviews%ROWTYPE;  BEGIN  SELECT * INTO entry FROM matviews WHERE mv_name = matview; IF FOUND THEN  RAISE EXCEPTION ‘Vista Materializada ''''%'''' ya exite.'', matview;  END IF; EXECUTE ''REVOKE ALL ON '' || view_name || '' FROM PUBLIC''; EXECUTE ''GRANT SELECT ON '' || view_name || '' TO PUBLIC'';  EXECUTE ''CREATE TABLE '' || matview || '' AS SELECT * FROM '' || view_name;  EXECUTE ''REVOKE ALL ON '' || matview || '' FROM PUBLIC'';  EXECUTE ''GRANT SELECT ON '' || matview || '' TO PUBLIC'';  INSERT INTO matviews (mv_name, v_name, last_refresh)  VALUES (matview, view_name, CURRENT_TIMESTAMP);  RETURN;  END ';
vistas materializadas o materializedviews Funciondrop_matvie  esta función elimina la vista materilizada y la remueve de la tabla matviews  .. CREATE OR REPLACE FUNCTION drop_matview(NAME) RETURNS VOID  SECURITY DEFINER  LANGUAGE plpgsql AS ‘ DECLARE matview ALIAS FOR $1;  entry matviews%ROWTYPE;  BEGIN  SELECT * INTO entry FROM matviews WHERE mv_name = matview;  IF NOT FOUND THEN  RAISE EXCEPTION '‘Vista materilizada% no existe.'', matview;  END IF; EXECUTE ''DROP TABLE '' || matview; DELETE FROM matviews WHERE mv_name=matview;  RETURN; END '; ';
vistas materializadas o materializedviews Funcionrefresh_matview Esta funcion actualiza o carga  las vistas materializadas para que los datos no se convierta en obsoletos. Utiliza un algoritmo de fuerza bruta que eliminarán todas lasfilas y vuelva y las recarga con los datos de la vista ejecutada.Tenga en cuenta que es posible que desee eliminar los índices en la vistamaterializada antes de la ejecución de esta funcion, y los vuelve a recrear después de que termine de ejecutar esta funcion. CREATE OR REPLACE FUNCTION refresh_matview(name) RETURNS VOID SECURITY DEFINER  LANGUAGE plpgsql AS '  DECLARE matview ALIAS FOR $1; entrymatviews%ROWTYPE;  BEGIN  SELECT * INTO entry FROM matviews WHERE mv_name = matview;  IF NOT FOUND THEN RAISE EXCEPTION ‘Vista materializada % no existe.'', matview;  END IF;  EXECUTE ''DELETE FROM '' || matview;  EXECUTE ''INSERT INTO '' || matview || '' SELECT * FROM '' || entry.v_name; UPDATE matviews SET last_refresh=CURRENT_TIMESTAMP WHERE mv_name=matview;  RETURN; END ';
vistas materializadas o materializedviews Ejemplo de una vista materializadatipo Snapshot  CREATE TABLE jugadores( pname VARCHAR(255) PRIMARY KEY );  CREATE TABLE juego_resultado( pname VARCHAR(255) NOT NULL, score INTEGER NOT NULL );  CREATE VIEW jugadores_total_puntaje_vAS SELECT pname, sum(score) AS total_score FROM game_score GROUP BY pname;  En estecaso los juagdoresjuegancadadia y correruna vista esdemasidocostoso en rendimiento y desempeño, porconsiguente se decide imprementaruna vista materializadapara el puntaje total de cadajugador (jugadores_total_puntaje_v). Se ejecutan los siguinetescomandos: SELECT create_matview('jugadores_total_puntaje_mv', 'jugadores_total_puntaje_v');  CREATE INDEX pname_idx ON player_total_score_mv(pname); Cadanoche (o cadahoradepende de como los jugadoresmirar los resultados) , se deberefrescar la vista materializada con el siguinetecomando. DROP INDEX pname_idx ON jugadores_total_puntaje_mv;  SELECT refresh_matview('jugadores_total_puntaje_mv');  CREATE INDEX pname_idx ON jugadores_total_puntaje_mv(pname); Even though the scores in player_total_score_mv isn't going to change to reflect the most current scores until the refresh is run, the players will learn to accept that. ';
EjemploRecursividad La recursividad permite la capacidad  de poder seleccionar un conjunto de datos de forma recursiva de manera que podemos obtener una serie de datos en estructura de árbol. La devolución de datos jerárquicos es un uso frecuente de las consultas recursivas; por ejemplo, mostrar los empleados en un organigrama o los datos en un escenario de lista de materiales en donde un producto primario tiene uno o varios componentes que, a su vez, tienen subcomponentes o son componentes de otros elementos primarios. Una solución es una  expresión de tabla común (CTE) , esta ofrece la gran ventaja de poder hacer referencia a sí misma, creando así una CTE recursiva. Una CTE recursiva es aquélla en la que una CTE inicial se ejecuta varias veces para devolver subconjuntos de datos hasta que se obtenga el conjunto de resultados completo. Se considera que una consulta es recursiva cuando hace referencia a un CTE recursiva.  Una CTE recursiva puede simplificar en gran medida el código necesario para ejecutar una  consulta recursiva en una instrucción SELECT, INSERT, UPDATE, DELETE o CREATE VIEW.  Anteriormente la solución utilizaba   tablas  temporales, cursores y lógica para controlar el flujo de los pasos recursivos.
EjemploRecursividad CREATE TABLE empleado(  id_Empleado INTEGER PRIMARY KEY, -- ID empleado Nombre TEXT, Apellido             TEXT,     Cargo                TEXT,      parent_EmpleadoINTEGER REFERENCES empleado, -- upper department ID  DeptIDINTEGER,-- department name );  FirstNamenvarchar(30) NOT NULL, LastNamenvarchar(40) NOT NULL, Title nvarchar(50) NOT NULL, DeptIDsmallint NOT NULL, ManagerIDint NULL,.
EjemploRecursividad La jerarquía en colombia La jerarquía es algo así: El mundo contiene Colombia, que contienen... departamentos, que contienen... Municipios, que contienen...       Barrios CREATE  TABLE lugares (       id INTEGER PRIMARY KEY,        parent_lugares INTEGER REFERENCES lugares,       nombre TEXT       );  
EjemploRecursividad INSERT INTO lugares VALUES (0, NULL, ‘COLOMBIA'); INSERT INTO  lugares  VALUES (1, 0, 'ANTIOQUIA');     INSERT INTO  lugares  VALUES (2, 1, ‘AMAGA');     INSERT INTO  lugares  VALUES (3, 1, ‘MEDELLIN');     INSERT INTO  lugares  VALUES (4, 1, ‘ENVIGADO');     INSERT INTO  lugares  VALUES (5, 0, ‘BOGOTA');     INSERT INTO  lugares  VALUES (6, 5, ‘SOACHA');     INSERT INTO  lugares  VALUES (7, 3, ‘LAURELES');  Extraer todos los  municipios de antioquia CREATE  VIEW vMunicipiosAntioquia AS       WITH RECURSIVE MunicipiosAntioquia AS       (                  SELECT * FROM lugares WHERE nombre = ‘ANTIOQUIA'           UNION ALL              SELECT d.* FROM lugares AS d, MunicipiosAntioquia AS sd               WHERE d.parent_lugares = sd.id       )       SELECT * FROM MunicipiosAntioquia;   SELECT * FROM vlugaresORDER BY nombre;
Ejemplo Un requisito muy común en un sistema de información es tener una o más funciones que le permita a los usuarios poder buscar los datos al seleccionando libremente entre muchos criterios posibles. Este tipo de soluciones además de producir el resultado deseado, debe mantener el tiempo de respuesta dentro de los límites aceptables, por lo menos para las búsquedas comunes.  El código debe ser fácil de mantener, que permita modificar fácilmente para las nuevas necesidades y requerimientos.
EjemploPaginación Es común mostrar  una serie numerosa de resultados en las aplicaciones, esto genera un gran consumo de recursos del servidor de base de datos, de la red y de la aplicación cliente. Para resolver el inconveniente se utiliza la paginación, la cual consiste en dividir los resultados en grupos manejable de registros y mostrarlos en distintas páginas. Permitiendo al usuario navegar sobre el conjunto de páginas.
SQL Dinámico Que pasa si en algún momento fuese el propio programa creado el que tuviese que decidir, en tiempo de ejecución, las sentencias a usar o las tablas a referenciar. SQL dinámico, no codificar de forma fija una sentencia de SQL.  SQL Dinamico permite que sea el programa el que construya dicha(s) sentencia(s), en una de sus áreas de datos y en tiempo de ejecución, y luego traspase el texto de la(s) misma(s) a la base de datos para que se ejecute en tiempo real. La ejecución dinámica permite que  la sentencia SQL que va a ejecutar nuestro servidor de base de datos no está escrita en ningún lugar, sino que se encuentra asignada a una variable de tipo texto y se crea cada vez que tenemos que ejecutarla.
SQL Dinámico  SQL dinámico creado en las aplicaciones: es cuando insertamos instrucciones sql (select, insert, update, delete) en el código fuente de nuestra aplicación. SQL dinámico creado en el servidor de base de datos: Generalmente se utiliza en los procedimientos almacenados,
SQL Dinámico CREATE PROCEDURE OrdenarPor@Columnavarchar(50) AS DECLARE @sSQLvarchar(50) SET @sSQL=’SELECT * FROMMiTablaORDER BY ’ + @Columna EXEC @sSQL Problemas de seguridad permite realizar inyeccion de codigo(la finalización prematura de una cadena de texto y la anexión de un comando nuevo) SQL por la variable @Columna CREATE PROCEDURE OrdenarPor@Columnavarchar(50) AS SELECT * FROM miTablaORDER BY CASE@Columna WHEN 'columna1' THEN columna1 WHEN 'columna2' THEN columna2 WHEN 'columna3' THEN columna3 END
Data Access Layer (DAL) usingSystem; usingSystem.Data; usingSystem.Data.SqlClient; publicpartialclassSelectRecords : System.Web.UI.Page{ protectedvoidPage_Load(objectsender, EventArgs e)     {    } protectedvoid Button1_Click(objectsender, EventArgs e)     {         // Consigue todos los registros sin parametros DataTabledataTable = DAL.ExecuteDataTable("sp_GetAllUsers", null);         GridView1.DataSource = dataTable;         GridView1.DataBind();     } protectedvoid Button2_Click(objectsender, EventArgs e)     { SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@Name", "AsifIqbal");         // GetAll Records with NAME Parameter DataTabledataTable = DAL.ExecuteDataTable("sp_GetAllUsersByName", param);         GridView1.DataSource = dataTable;         GridView1.DataBind();     } }
SQL DESDE LA APLICACION  SQL  ad hoc son script embedidosdirectamente en el codigo desarrollar una aplicación que envía consultas de SQL ad hoc(sistema permite al usuario personalizar una consulta en tiempo real, en vez de estar atado a las consultas prediseñadas)directamente del cliente o de la capa intermedia en lugar de ejecutar procedimientos almacenados. El problema con procedimientos almacenados es que necesitan volver a escribir para cada base de datos, la mayoría de sentencia de SQL se pueden escribir de modo que funciona en todos los RDBMS importante. Como un ISV tenemos clientes con SQL Server y Oracle, la próxima semana una persona de ventas puede vender nuestro software a alguien con DB2 Usted tiene que decidir entre una alta escalabilidad mediante la inclusión de TODOSsu lógica de negocio en los procedimientos almacenados o de mantenimiento de alta /independencia db. Teniendo en cuenta que HW es barata y mano de obra es carasiempre me apoyan en este último.
SQL DESDE LA APLICACION  la regla es que los datos de consultas de la base de datos debe ser a través de vista, y los datos de actualizacioneliminacion  e insercion se realiza a través de un procedimiento. Si desea volver a utilizar este software e instalarlo en otra dependencia de plataformas de producción de base de datos es una limitación muy grande. Anddoing an O/R mapper that needs to support multiple databases is clearly easier using ad-hoc SQL.
TABLESPACES POSTGRESQL Tablespaces You can also specify the default tablespace when you create a new database. A tablespace is the place where database objects are stored on disk. If you’re familiar with SQL Server, you will know this as a filegroup. This is a more advanced feature and can be used to achieve incredible performance benefits by spreading physical database objects across multiple physical disks. Like collation, we’re not going to worry about tablespaces for now, but it is important to know that the feature is available. ¿Qué es?Lostablespaces son referencias a ubicaciones físicas  del almacenamiento de bases de datos y/o de los objetos que éste contiene. ¿Cuándo debo utilizarlo?Esrecomendable utilizar tablespaces cuando se quiere especificar ubicaciones alternativas para determinadas bases de datos o tablas, como cuando queremos que ciertas tablas estén en otros discos distintos a los que se encuentran por ejemplo, para ubicar los tablespaces con data al que se accesa muy raras veces, en dispositivos de almacenamientos lentos y a los tablespaces con data a la que constantemente se accede, en medios de almacenamiento mucho mas rápidos. CREATE TABLESPACE ram_space LOCATION '/mnt/ram0/pgspace'; CREATE TABLESPACE create table test_ram (i integer, name text) tablespaceram_space; CREATE TABLE
TABLESPACES POSTGRESQL Para implementar esto debes crear un para de directorios donde postgres va a guardar los datos. Si esta trabajando en linux, debes hacer que el dueño del árbol de directorios se postgres. Por ejemplo:   1) crear directorios en el disco para el tablespace: mkdir -p /tablespaces/datos1 mkdir -p /tablespaces/datos2    2)   dentro de postgres createtablespace datos1 location '/tablespaces/datos1' ; createtablespace datos2 location '/tablespaces/datos2' ;    3) dentro de postgres.            alter table <nombre_tabla> set tablespace datos1;            alter table <nombre_tabla> set tablespace datos2; tene en cuenta que los tablespaces debes colocarlos uno en cada  disco.

More Related Content

What's hot

Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Alexander Calderón
 
Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenadoshirmaroxana13
 
Instrucciones Transact S Q L
Instrucciones Transact  S Q LInstrucciones Transact  S Q L
Instrucciones Transact S Q LOlaya Molina
 
Transferencia de datos en Oracle
Transferencia de datos en OracleTransferencia de datos en Oracle
Transferencia de datos en OracleCarmen Soler
 
Diagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverDiagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverSpanishPASSVC
 
Categorias de Procedimientos Almacenados
Categorias de Procedimientos AlmacenadosCategorias de Procedimientos Almacenados
Categorias de Procedimientos AlmacenadosCarlos Pereda Miñano
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sqlSuarezJhon
 
Administración de Oracle - Tema 4 - Interacción con la Base de Datos
Administración de Oracle - Tema 4 - Interacción con la Base de DatosAdministración de Oracle - Tema 4 - Interacción con la Base de Datos
Administración de Oracle - Tema 4 - Interacción con la Base de DatosHector Martinez
 
Mantenimiento de la base de datos Oracle 11g
Mantenimiento de la base de datos Oracle 11gMantenimiento de la base de datos Oracle 11g
Mantenimiento de la base de datos Oracle 11gCarmen Soler
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2Carmen Soler
 
Consideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerConsideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerEduardo Castro
 
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...SolidQ
 

What's hot (19)

Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02
 
Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenados
 
Instrucciones Transact S Q L
Instrucciones Transact  S Q LInstrucciones Transact  S Q L
Instrucciones Transact S Q L
 
Transferencia de datos en Oracle
Transferencia de datos en OracleTransferencia de datos en Oracle
Transferencia de datos en Oracle
 
TRANSACT-SQL
TRANSACT-SQLTRANSACT-SQL
TRANSACT-SQL
 
Diagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverDiagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql server
 
Presentación1
Presentación1Presentación1
Presentación1
 
Categorias de Procedimientos Almacenados
Categorias de Procedimientos AlmacenadosCategorias de Procedimientos Almacenados
Categorias de Procedimientos Almacenados
 
Sql Procedural
Sql ProceduralSql Procedural
Sql Procedural
 
Lenguaje Transact SQL
Lenguaje Transact SQL Lenguaje Transact SQL
Lenguaje Transact SQL
 
Herramientas Bd
Herramientas BdHerramientas Bd
Herramientas Bd
 
7.1. procedimientos almacenados
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Administración de Oracle - Tema 4 - Interacción con la Base de Datos
Administración de Oracle - Tema 4 - Interacción con la Base de DatosAdministración de Oracle - Tema 4 - Interacción con la Base de Datos
Administración de Oracle - Tema 4 - Interacción con la Base de Datos
 
Mantenimiento de la base de datos Oracle 11g
Mantenimiento de la base de datos Oracle 11gMantenimiento de la base de datos Oracle 11g
Mantenimiento de la base de datos Oracle 11g
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2
 
Consideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerConsideraciones de hardware para SQL Server
Consideraciones de hardware para SQL Server
 
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...
Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ S...
 

Similar to ProcedimientosAlmacenados

Similar to ProcedimientosAlmacenados (20)

Data warehouse
Data warehouseData warehouse
Data warehouse
 
Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014Técnicas avanzadas de consultas con sql server 2014
Técnicas avanzadas de consultas con sql server 2014
 
Ms SQL Server
Ms SQL ServerMs SQL Server
Ms SQL Server
 
Vistazo a SQL Server 2016
Vistazo a SQL Server 2016Vistazo a SQL Server 2016
Vistazo a SQL Server 2016
 
LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQLLENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
 
Data warehouse
Data warehouseData warehouse
Data warehouse
 
Data warehouse
Data warehouseData warehouse
Data warehouse
 
Data werehousing
Data werehousingData werehousing
Data werehousing
 
Presentacion proyecto
Presentacion proyectoPresentacion proyecto
Presentacion proyecto
 
Tuning fondo-negro-2
Tuning fondo-negro-2Tuning fondo-negro-2
Tuning fondo-negro-2
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
 
Desnormalizacion bases datos 2
Desnormalizacion bases datos 2Desnormalizacion bases datos 2
Desnormalizacion bases datos 2
 
Creación de base de datos
Creación de base de datosCreación de base de datos
Creación de base de datos
 
Sugerencias para consultas sql
Sugerencias para consultas  sqlSugerencias para consultas  sql
Sugerencias para consultas sql
 
Pres17BDII.ppt
Pres17BDII.pptPres17BDII.ppt
Pres17BDII.ppt
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx
 
13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx
 

More from josecuartas

Seguridad en el almacenamiento de las bases de datos
Seguridad en el almacenamiento de las bases de datosSeguridad en el almacenamiento de las bases de datos
Seguridad en el almacenamiento de las bases de datosjosecuartas
 
Anti patrones SQL, Modelo conceptual
Anti patrones SQL, Modelo conceptualAnti patrones SQL, Modelo conceptual
Anti patrones SQL, Modelo conceptualjosecuartas
 
Tableros de control o Dashboard
Tableros de control o DashboardTableros de control o Dashboard
Tableros de control o Dashboardjosecuartas
 
Visualizacion de datos
Visualizacion de datosVisualizacion de datos
Visualizacion de datosjosecuartas
 
Calidad de datos
Calidad de datosCalidad de datos
Calidad de datosjosecuartas
 
De los datos a la información
De los datos a la informaciónDe los datos a la información
De los datos a la informaciónjosecuartas
 
Datos semiestructurados Xml
Datos semiestructurados XmlDatos semiestructurados Xml
Datos semiestructurados Xmljosecuartas
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
 
Bases de datos temporales
Bases de datos temporalesBases de datos temporales
Bases de datos temporalesjosecuartas
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicojosecuartas
 
índices en bases de datos
índices en bases de datosíndices en bases de datos
índices en bases de datosjosecuartas
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosjosecuartas
 
Seguridad en bases de datos
Seguridad en bases de datosSeguridad en bases de datos
Seguridad en bases de datosjosecuartas
 
Los datos en el disco duro
Los datos en el disco duroLos datos en el disco duro
Los datos en el disco durojosecuartas
 
Digramas de venn aplicado en las bases datos
Digramas de venn aplicado en las bases datosDigramas de venn aplicado en las bases datos
Digramas de venn aplicado en las bases datosjosecuartas
 
Bases de datos avanzado NOSQL
Bases de datos avanzado NOSQLBases de datos avanzado NOSQL
Bases de datos avanzado NOSQLjosecuartas
 
Disco duro bases datos
Disco duro bases datosDisco duro bases datos
Disco duro bases datosjosecuartas
 
Fuga de información
Fuga de informaciónFuga de información
Fuga de informaciónjosecuartas
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 

More from josecuartas (20)

Seguridad en el almacenamiento de las bases de datos
Seguridad en el almacenamiento de las bases de datosSeguridad en el almacenamiento de las bases de datos
Seguridad en el almacenamiento de las bases de datos
 
Anti patrones SQL, Modelo conceptual
Anti patrones SQL, Modelo conceptualAnti patrones SQL, Modelo conceptual
Anti patrones SQL, Modelo conceptual
 
Tableros de control o Dashboard
Tableros de control o DashboardTableros de control o Dashboard
Tableros de control o Dashboard
 
Visualizacion de datos
Visualizacion de datosVisualizacion de datos
Visualizacion de datos
 
Calidad de datos
Calidad de datosCalidad de datos
Calidad de datos
 
De los datos a la información
De los datos a la informaciónDe los datos a la información
De los datos a la información
 
Datos semiestructurados Xml
Datos semiestructurados XmlDatos semiestructurados Xml
Datos semiestructurados Xml
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
 
Bases de datos temporales
Bases de datos temporalesBases de datos temporales
Bases de datos temporales
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 
índices en bases de datos
índices en bases de datosíndices en bases de datos
índices en bases de datos
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datos
 
Seguridad en bases de datos
Seguridad en bases de datosSeguridad en bases de datos
Seguridad en bases de datos
 
Los datos en el disco duro
Los datos en el disco duroLos datos en el disco duro
Los datos en el disco duro
 
Digramas de venn aplicado en las bases datos
Digramas de venn aplicado en las bases datosDigramas de venn aplicado en las bases datos
Digramas de venn aplicado en las bases datos
 
Bases de datos avanzado NOSQL
Bases de datos avanzado NOSQLBases de datos avanzado NOSQL
Bases de datos avanzado NOSQL
 
Disco duro bases datos
Disco duro bases datosDisco duro bases datos
Disco duro bases datos
 
Fuga de información
Fuga de informaciónFuga de información
Fuga de información
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
SQL avanzado
SQL avanzadoSQL avanzado
SQL avanzado
 

Recently uploaded

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Recently uploaded (20)

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

ProcedimientosAlmacenados

  • 1. ProcedimientosAlmacenados(stored procedures) Un procedimiento almacenado se puede definir como un programa, procedimiento ó función, el cual está almacenado en la base de datos y listo para ser usado. Utilizar parámetros de salida : Si se ejecuta una consulta de SQL ad hoc que devuelve una sola fila, debes utilizar un conjunto de resultados. Un procedimiento almacenado ofrece la posibilidad de utilizar parámetros de salida, lo que resulta ser mucho más rápido. Si ejecutas sólo una consulta, no notarás la diferencia, pero si ejecutas la consulta siguiente 2000 veces, es probable que ganes mucho devolviendo @key como parámetro de salida en lugar de un conjunto de resultados. Manejar las dependencias : En un sistema complejo que incluye unos centenares de tablas, muchas veces quieres saber dónde se usa una tabla o columna determinada, por ejemplo si quieres cambiar una columna de alguna manera. Si todo el código está en procedimientos almacenados, sólo se tiene que buscar en el texto de los procedimientos para encontrar las referencias. Si envías instrucciones SQL directamente desde la aplicación, se debe buscar en una cantidad mayor de código, y si el nombre de la columna tiene un nombre común la tarea puede ser casi imposible. Establecer bloques de lógico: permite esconder los detalles de las base de datos dentro de los procedimientos, así que se convierten en una capa de abstracción.
  • 2. ProcedimientosAlmacenados Permisos:Un procedimiento almacenado es la solución clásica para manejar el acceso de los usuarios a los datos. Un usuario no debería tener los permisos para ejecutar SELECT, INSERT, UPDATE y DELETE directamente Almacenar los planes de consulta en la caché: Otra ventaja importante de los procedimientos almacenados es el rendimiento. Cuando un procedimiento almacenado se ejecuta por la primera vez, los motores de DB crea un plan de consulta y lo almacena en la caché para poder reutilizarlo en el futuro. Reducir el tráfico en la red: El tráfico en la red también afecta el rendimiento de las aplicaciones. Poner esta consulta en un procedimiento reduce la cantidad de bytes que se transmite por la red, lo que puede mejorar el rendimiento si hay mucho tráfico. La diferencia es aún más evidente cuando tienes una serie de instrucciones SELECT/INSERT/UPDATE interrelacionadas. Un procedimiento almacenado te permite utilizar tablas temporales o variables de tabla para procesar todos los datos en el servidor. En caso de utilizar instrucciones de SQL ad hoc(Cliente), “se tiene que enviar todos los datos entre el servidor y el cliente o la capa intermedia” esto se puede resolver creando tablas temporales sin un procedimiento almacenado, - pero se puedes tener problemas con el connectionpooling y los conjunto de registro -.
  • 3. ProcedimientosAlmacenadosPostgres Un procedimiento almacenado en PostgreSQL se puede escribir en multiples lenguajes de programación. En una instalación por defecto de PostgreSQL podremos tener disponibles los siguientes lenguajes: PL/pgSQL, PL/Perl, PL/Tcl y PL/Python. El único lenguaje que está disponible automáticamente es PL/pgSQL. Para utilizar PL/Perl, PL/Tcl o PL/Python tendremos que haber configurado/compilado PostgreSQL con estos parámetros --with-perl --with-tcl --with-python. Tambien existen muchos otros lenguajes disponibles como módulos adicionales, entre ellos, PL/Java, PL/PHP, PL/R, PL/Ruby, PL/Sheme y PL/sh, pero estos tienen que descargarse e instalarse por separado . PL/pgSQLes muy parecido al lenguaje PL/SQL utilizado por Oracle, Los objetivos de PL/pgSQL cuando se creo fueron: Poder ser usado para crear funciones y disparadores (triggers) Añadir estructuras de control al lenguaje SQL Poder realizar cálculos complejos Heredar todos los tipos, funciones y operadores definidos por el usuario Poder ser definido como un lenguaje "de confianza" Fácil de usar
  • 4. ProcedimientosAlmacenadosPostgres PL/pgSQLes un lenguaje estructurado en bloques. Como mínimo tendremos un bloque principal en nuestro procedimiento almacenado y dentro de este podremos tener subbloques. CREATE OR REPLACE FUNCTION ejemplo_txt(integer, integer) RETURNStext AS $$ DECLARE numero1 ALIAS FOR $1; numero2 ALIAS FOR $2; constante CONSTANTinteger := 100; resultado INTEGER; resultado_txtTEXT DEFAULT 'El resultado es 104'; BEGIN resultado := (numero1 * numero2) + constante; IF resultado <> 104 THENresultado_txt := 'El resultado NO es 104'; END IF; RETURNresultado_txt; END; $$ LANGUAGEplpgsql;
  • 5. Tablasparticionadas Normalmente las tablas particionadas se crean por que las tablas tiene un gran tamaño ademas del gran número de inserciones diarias. Permitiendo un esquema de organización de los datos en la tabla. Cuando hay grandes conjuntos de datos, las operaciones frecuentes de mantenimiento (estas se realizan en los datos estáticos) puede tener efectos costosos, tales como problemas de rendimiento, problemas de bloqueo, las copias de seguridad (espacio, tiempo y costos operativos), así como un impacto negativo en la escalabilidad global del servidor. Las busquedasmediante índices globales tiene un pobre desempeño ya que se revisan toda la tabla. Las tablas particionadas permite dividir los datos dentro de múltiples objetos de almacenamiento llamados particiones de datos o rangos de acuerdo con los valores en una o mas columnas de la tabla. Las tablas particionadas mejorar la escalabilidad y manejabilidad de las tablas grandes y las tablas que tienen diferentes patrones de acceso como las fechas. Cada partición de datos se puede almacena por separado.  .
  • 6. Tablasparticionadas proceso de consultas también pueden tomar ventaja de la separación de los datos para evitar la exploración de datos irrelevantes. Con el uso de índices que incluyen las columnas de partición se reduce el ámbito de busqueda y con ello se mejora la rapidez. Las particiones de tablas dan la posibilidad de ser truncadas por separado y por ello son usadas muy a menudo en tablas donde la validez de sus datos están sujetos a fechas donde el truncate de una partición no afecta al total de la tabla. las particiones se dividen en una partición activa y las de archivado. si una tabla grande existe en un sistema con varias CPU, la partición de la tabla puede llevar a un mejor desempeño a través de operaciones paralelas. El rendimiento de las operaciones a gran escala a través de conjuntos de datos extremadamente grandes (por ejemplo, millones de filas) se pueden beneficiar mediante la realización de múltiples operaciones en paralelo. Cada N días se trunca mediante un job la partición que será la particionactiva para realizar inserts, de esta manera las otras particiones se mantendrán intactas, manteniendo así un histórico de datos para consultas limitadas por fechas y provocando menor movimiento de bloques de memoria y la desfragmentación causada por inserción o borrado de datos. .
  • 7. TablasparticionadasPostgresql En postgresql el tipo de partitioning soportado se denomina particionado mediante herencia de tablas. Cada partición puede ser creada como una tabla hija de una unica tabla padre. La tabla padre normalmente debe de ser una tabla vacia, que representara a todo el conjunto de datos. Los dos tipos de particionado mas comunes en postgresql son: 1. Particionar por rangos. La tabla es particionada mediante rangos definidos en base a la columna de clave primaria o cualquier columna que no se solape entre los rangos de valores asignados a diferentes tablas hijas. 2. Particionar por lista. La tabla es particionada listando los valores de cada una de las claves en cada particion. .
  • 8. TablasparticionadasPostgresql En postgresql para poder utilizar dicha técnica es necesario seguir algunos pasos: 1. Crear la tabla "maestra", de la cual todas las tablas hijas heredaran. Esta tabla no contendra datos, no debe de tener ningun tipo de restricción (check), no debe de tener indice ni nada por el estilo. 2. Crear todas las tablas hijas heredando de la tabla maestra. Por lo regular estas tablas heredaran todos los campos de la tabla padre y no es necesario crearlos nosotros mismos. 3. Agregar a todas las tablas hijas las restricciones correspondientes sobre los datos que albergaran. Algunos ejemplos de esto serian: CHECK ( pais IN ('México', 'Argentina')), CHECK ( id_cliente BETWEEN 100 AND 200 ) ... CHECK ( id_cliente BETWEEN 5000 AND 5200), estos dos ultimos ejemplos son para evitar traslapes entre los ids de clientes. 4. Para cada particion, crear un indice para la columna(s) Clave, tambien se pueden poner los indices que a cada quien le convengan. El indiceclave primaria no es estrictamente necesario, pero en la mayoria de los casos ayuda mucho. Si se nesecita una clave unica o clave primaria, esta se necesitaras crear para cada tabla hija. 5. Definir una regla (RULE) o trigger para redirigir las modificaciones de la tabla padre (master) a la apropiada particion. 6. Verificar que este habilitado a on el parametroconstraint_exlusion (SET constraint_exclusion = on;) en el archivo de configuracionpostgresql.conf para que los querys sean optimizados para el partitioning. .
  • 9. TablasparticionadasPostgresql CREATE TABLE produccion(id int not null, no_serieint, id_modeloint, id_personalint, fecha_fabricacion date, fecha_salida date); particionaremos en base al modelo del producto fabricado. SELECT * from modelos order by id; id | modelo | caracteristicas | descripcion | imagen -+ 1 | ODIN | 5 litros por minuto | calentador de paso | 2 | DELTA 01 | 7 litros por minuto | calentador de paso | 3 | DELTA 01-PLUS | 9 litros por minuto | calentador de paso | 4 | DELTA 02 | 13 LITROS POR MINUTO | CALENTADOR DE PASO | Crear las tablas hijas heredadas de la tabla "produccion", aqui es donde se crean las restricciones (CHECK) para los datos que albergaran cada tabla hija. CREATE TABLE produccion_odin ( CHECK (id_modelo = 1) ) INHERITS (produccion); CREATE TABLE produccion_delta01 ( CHECK (id_modelo = 2) ) INHERITS (produccion); CREATE TABLE produccion_delta01plus ( CHECK (id_modelo = 3) ) INHERITS (produccion); CREATE TABLE produccion_delta02 ( CHECK (id_modelo = 4) ) INHERITS (produccion); Creacion clave primariapara agilizar la busqueda de registros o garantizar la unicidad de los mismos. ALTER TABLE produccion_odin ADD PRIMARY KEY (id); Creacion de indices los cualespordefecto son B-TREE CREATE INDEX produccion_odin_id ON produccion_odin (id); CREATE INDEX produccion_delta01_id ON produccion_delta01 (id); CREATE INDEX produccion_delta01plus_id ON produccion_delta01plus (id); CREATE INDEX produccion_delta02_id ON produccion_delta02 (id); .
  • 10. TablasparticionadasPostgresql Bien, ahora procederemos a crear el juego de reglas para garantizar el llenado en cascada de los datos y que cuando estos caigan en la tabla maestra sean redirigidos a sus respectivas tablas. . -- Regla para produccion_odin CREATE RULE produccion_odin_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 1 ) DO INSTEAD INSERT INTO produccion_odin VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta01 CREATE RULE produccion_delta01_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 2 ) DO INSTEAD INSERT INTO produccion_delta01 VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta01plus CREATE RULE produccion_delta01plus_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 3 ) DO INSTEAD INSERT INTO produccion_delta01plus VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida); -- Regla para produccion_delta02 CREATE RULE produccion_delta02_insert_rule AS ON INSERT TO produccion WHERE ( id_modelo = 4 ) DO INSTEAD INSERT INTO produccion_delta02 VALUES ( NEW.id, NEW.no_serie, NEW.id_modelo, NEW.id_personal, NEW.fecha_fabricacion, NEW.fecha_salida);
  • 11. TablasparticionadasPostgresql Se procede a crearuna vista quecontendratodos los valores, talcomosi se tratase de unatablaenorme: CREATE VIEW produccion_total AS SELECT * FROM produccion_odin UNION ALL SELECT * FROM produccion_delta01 UNION ALL SELECT * FROM produccion_delta01plus UNION ALL SELECT * FROM produccion_delta02; Con esto se tiene un esquema de tablas particionadas, para terminar se habilita el obtimizador de consultas para evitar la busqueda de algun dato en todas las particiones Para configurar desde psql: SET constraint_exclusion = on; o modificando el postgresql.conf de la siguiente manera, anexando la siguiente linea: constraint_exclusion = on .
  • 12.
  • 13. Logs automáticos de cambios a las tablas. Una aplicación puede guardar un registro corriente de cambios, creando un trigger que se dispare siempre que una tabla se modifique.
  • 14. La notificación automática de cambios a la Base de Datos con alertas de evento en los triggers.
  • 15.
  • 16. EjemploTransaccionesautónomas  En ocasiones es necesario que los datos escritos por parte de una transacción sean persistentes a pesar de que la transacción se deshaga con un ROLLBACK. Es muy común que, por ejemplo, en caso de que se produzca algún tipo de error queramos insertar un registro en una tabla de log con el error que se ha produccido y hacer ROLLBACK de la transacción. Pero si hacemos ROLLBACK de la transacción tambien se realiza una INSERT a un LOG. Quedando el error en la tabla de log, pero las acciones de la transacción principal retornarían a su estado anterior. Utilizacion Mecanismo de Logging (log de seguimiento ) Contador de Intentos Medidor de uso del software (registrar la llamada a la aplicacion independientemente que la transacción realice commit o rollback) Componentes reusables(la posibilidad de ofrecer unidades independientes de trabajo (también conocidas como cartridges) que realicen su tarea sin efecto sobre el ambiente que lo llama) No, pero puedes emularlo usando dblink o algún otro mecanismo dentro de una función para establecer una segunda conexión a la BD, y hacer cosas en esa otra conexión.
  • 17. EjemploTransaccionesautónomas CREATE OR REPLACE FUNCTION fn_log_error(p_functionvarchar, p_locationint, p_errorvarchar) RETURNSvoid AS $$ DECLARE v_sqlvarchar; v_returnvarchar; v_errorvarchar; BEGIN PERFORMdblink_connect(‘NombreConexion', 'dbname=...'); v_sql := 'INSERT INTO error_log (function_name, location, error_message, error_time) ‘ || 'VALUES (''' || p_function_name || ''', ' || p_location || ', ''' || p_error || ''', clock_timestamp())'; SELECT INTO v_return * FROMdblink_exec('NombreConexion', v_sql, false); --Obtiene el mensage de error SELECT INTO v_error * FROMdblink_error_message('NombreConexion'); IF position('ERROR' in v_error) > 0 OR position('WARNING' in v_error) > 0 THEN RAISE EXCEPTION '%', v_error; END IF; PERFORMdblink_disconnect('NombreConexion'); EXCEPTION WHENothersTHEN PERFORMdblink_disconnect('NombreConexion'); RAISE EXCEPTION '(%)', SQLERRM; END; $$ LANGUAGEplpgsqlSECURITYDEFINER;
  • 18. vistas materializadas o materializedviews Almacenan la definición de la vista propiamente dicha, Almacenan los registros que resultan de la ejecución de la sentencia SELECT que define la vista. los resultados se almacenan físicamente constituyendo una tabla real que ocupa espacio en el disco duro. Si una vista (view) utiliza muchas tablas base enlazadas de forma compleja, y dicha vista va a ser utilizada frecuentemente, será muy conveniente definirla como una vista materializada. Las materializedviewmejorar el rendimiento de la base de datos, ya que la sentencia SQL base de la vista sólo se ejecutará una vez. Si se reutilizarse en el futuro, se necesita un mecanismo para actualizar o refrescar dicha vista materializada, ya que las tablas base de la vista pueden haber sufrido modificaciones desde la creación de la misma.
  • 19. vistas materializadas o materializedviews Se comporta como un punto de vista. Es decir, los datos de la tabla cambia cuando los datos en las tablas subyacentes tienen cambios.  tipos de vistas materializadas: Instantánea(Snapshot) son las más simples de implementar. Ellos sólo se actualizan cuando se actualiza de forma manual.  Ansioso(Eager) se actualizan tan pronto como cualquier cambio se realiza en la base de datos que lo afectan.  Perezoso(Lazy) se actualizan cuando se confirma la transacción.  Muy perezoso(VeryLazy) son funcionalmente equivalentes a los Snapshot. La única diferencia es que los cambios se registran de forma incremental y son aplicado cuando la tabla se actualiza de forma manual. 
  • 20. vistas materializadas o materializedviews algunas consultas son muy lentas. Es posible que se haya gotado todas las técnicas estándar acelerar lasconsultas.  Se nesecitan la reestructuración completa de los datos. Lo que terminan haciendo es almacenar bits de pre-consulta de información para  no tener  que ejecutar la consulta  cuando se necesita los datos. Normalmente, esto se le  llama "caché" fuera del mundo de bases de datos. Desarrollo de una vista materializada CREATE TABLEmatviews ( mv_nameNAME NOT NULL PRIMARY KEY , v_nameNAME NOT NULL , last_refreshTIMESTAMP WITH TIME ZONE ); Las columnas son : mv_name: el nombre de la vista materializada .v_name: el nombre de la vista en la queestabasada la vista materializada. last_refresh: es la ultimavez(tiempo) en que la vista materilizadafueactulizada.
  • 21. vistas materializadas o materializedviews Funcioncreate_matview  esta función revisa si hay una vista materializada con ese nombre . Si es así, se produce una excepción. De lo contrario, crea una nueva tabla de la vista, e inserta una fila en la tabla matviews .. CREATE OR REPLACE FUNCTION create_matview(NAME, NAME) RETURNS VOID SECURITY DEFINER LANGUAGE plpgsql AS ' DECLARE matviewALIAS FOR $1; view_nameALIAS FOR $2; entrymatviews%ROWTYPE; BEGIN SELECT * INTO entry FROM matviews WHERE mv_name = matview; IF FOUND THEN RAISE EXCEPTION ‘Vista Materializada ''''%'''' ya exite.'', matview; END IF; EXECUTE ''REVOKE ALL ON '' || view_name || '' FROM PUBLIC''; EXECUTE ''GRANT SELECT ON '' || view_name || '' TO PUBLIC''; EXECUTE ''CREATE TABLE '' || matview || '' AS SELECT * FROM '' || view_name; EXECUTE ''REVOKE ALL ON '' || matview || '' FROM PUBLIC''; EXECUTE ''GRANT SELECT ON '' || matview || '' TO PUBLIC''; INSERT INTO matviews (mv_name, v_name, last_refresh) VALUES (matview, view_name, CURRENT_TIMESTAMP); RETURN; END ';
  • 22. vistas materializadas o materializedviews Funciondrop_matvie  esta función elimina la vista materilizada y la remueve de la tabla matviews  .. CREATE OR REPLACE FUNCTION drop_matview(NAME) RETURNS VOID SECURITY DEFINER LANGUAGE plpgsql AS ‘ DECLARE matview ALIAS FOR $1; entry matviews%ROWTYPE; BEGIN SELECT * INTO entry FROM matviews WHERE mv_name = matview; IF NOT FOUND THEN RAISE EXCEPTION '‘Vista materilizada% no existe.'', matview; END IF; EXECUTE ''DROP TABLE '' || matview; DELETE FROM matviews WHERE mv_name=matview; RETURN; END '; ';
  • 23. vistas materializadas o materializedviews Funcionrefresh_matview Esta funcion actualiza o carga  las vistas materializadas para que los datos no se convierta en obsoletos. Utiliza un algoritmo de fuerza bruta que eliminarán todas lasfilas y vuelva y las recarga con los datos de la vista ejecutada.Tenga en cuenta que es posible que desee eliminar los índices en la vistamaterializada antes de la ejecución de esta funcion, y los vuelve a recrear después de que termine de ejecutar esta funcion. CREATE OR REPLACE FUNCTION refresh_matview(name) RETURNS VOID SECURITY DEFINER LANGUAGE plpgsql AS ' DECLARE matview ALIAS FOR $1; entrymatviews%ROWTYPE; BEGIN SELECT * INTO entry FROM matviews WHERE mv_name = matview; IF NOT FOUND THEN RAISE EXCEPTION ‘Vista materializada % no existe.'', matview; END IF; EXECUTE ''DELETE FROM '' || matview; EXECUTE ''INSERT INTO '' || matview || '' SELECT * FROM '' || entry.v_name; UPDATE matviews SET last_refresh=CURRENT_TIMESTAMP WHERE mv_name=matview; RETURN; END ';
  • 24. vistas materializadas o materializedviews Ejemplo de una vista materializadatipo Snapshot CREATE TABLE jugadores( pname VARCHAR(255) PRIMARY KEY ); CREATE TABLE juego_resultado( pname VARCHAR(255) NOT NULL, score INTEGER NOT NULL ); CREATE VIEW jugadores_total_puntaje_vAS SELECT pname, sum(score) AS total_score FROM game_score GROUP BY pname; En estecaso los juagdoresjuegancadadia y correruna vista esdemasidocostoso en rendimiento y desempeño, porconsiguente se decide imprementaruna vista materializadapara el puntaje total de cadajugador (jugadores_total_puntaje_v). Se ejecutan los siguinetescomandos: SELECT create_matview('jugadores_total_puntaje_mv', 'jugadores_total_puntaje_v'); CREATE INDEX pname_idx ON player_total_score_mv(pname); Cadanoche (o cadahoradepende de como los jugadoresmirar los resultados) , se deberefrescar la vista materializada con el siguinetecomando. DROP INDEX pname_idx ON jugadores_total_puntaje_mv; SELECT refresh_matview('jugadores_total_puntaje_mv'); CREATE INDEX pname_idx ON jugadores_total_puntaje_mv(pname); Even though the scores in player_total_score_mv isn't going to change to reflect the most current scores until the refresh is run, the players will learn to accept that. ';
  • 25. EjemploRecursividad La recursividad permite la capacidad de poder seleccionar un conjunto de datos de forma recursiva de manera que podemos obtener una serie de datos en estructura de árbol. La devolución de datos jerárquicos es un uso frecuente de las consultas recursivas; por ejemplo, mostrar los empleados en un organigrama o los datos en un escenario de lista de materiales en donde un producto primario tiene uno o varios componentes que, a su vez, tienen subcomponentes o son componentes de otros elementos primarios. Una solución es una expresión de tabla común (CTE) , esta ofrece la gran ventaja de poder hacer referencia a sí misma, creando así una CTE recursiva. Una CTE recursiva es aquélla en la que una CTE inicial se ejecuta varias veces para devolver subconjuntos de datos hasta que se obtenga el conjunto de resultados completo. Se considera que una consulta es recursiva cuando hace referencia a un CTE recursiva. Una CTE recursiva puede simplificar en gran medida el código necesario para ejecutar una consulta recursiva en una instrucción SELECT, INSERT, UPDATE, DELETE o CREATE VIEW. Anteriormente la solución utilizaba tablas temporales, cursores y lógica para controlar el flujo de los pasos recursivos.
  • 26. EjemploRecursividad CREATE TABLE empleado( id_Empleado INTEGER PRIMARY KEY, -- ID empleado Nombre TEXT, Apellido TEXT, Cargo TEXT, parent_EmpleadoINTEGER REFERENCES empleado, -- upper department ID DeptIDINTEGER,-- department name ); FirstNamenvarchar(30) NOT NULL, LastNamenvarchar(40) NOT NULL, Title nvarchar(50) NOT NULL, DeptIDsmallint NOT NULL, ManagerIDint NULL,.
  • 27. EjemploRecursividad La jerarquía en colombia La jerarquía es algo así: El mundo contiene Colombia, que contienen... departamentos, que contienen... Municipios, que contienen... Barrios CREATE  TABLE lugares (       id INTEGER PRIMARY KEY,        parent_lugares INTEGER REFERENCES lugares,       nombre TEXT       );  
  • 28. EjemploRecursividad INSERT INTO lugares VALUES (0, NULL, ‘COLOMBIA'); INSERT INTO  lugares  VALUES (1, 0, 'ANTIOQUIA');     INSERT INTO  lugares  VALUES (2, 1, ‘AMAGA');     INSERT INTO  lugares  VALUES (3, 1, ‘MEDELLIN');     INSERT INTO  lugares  VALUES (4, 1, ‘ENVIGADO');     INSERT INTO  lugares  VALUES (5, 0, ‘BOGOTA');     INSERT INTO  lugares  VALUES (6, 5, ‘SOACHA');     INSERT INTO  lugares  VALUES (7, 3, ‘LAURELES');  Extraer todos los municipios de antioquia CREATE  VIEW vMunicipiosAntioquia AS       WITH RECURSIVE MunicipiosAntioquia AS       (                  SELECT * FROM lugares WHERE nombre = ‘ANTIOQUIA'           UNION ALL              SELECT d.* FROM lugares AS d, MunicipiosAntioquia AS sd               WHERE d.parent_lugares = sd.id       )       SELECT * FROM MunicipiosAntioquia;   SELECT * FROM vlugaresORDER BY nombre;
  • 29. Ejemplo Un requisito muy común en un sistema de información es tener una o más funciones que le permita a los usuarios poder buscar los datos al seleccionando libremente entre muchos criterios posibles. Este tipo de soluciones además de producir el resultado deseado, debe mantener el tiempo de respuesta dentro de los límites aceptables, por lo menos para las búsquedas comunes. El código debe ser fácil de mantener, que permita modificar fácilmente para las nuevas necesidades y requerimientos.
  • 30. EjemploPaginación Es común mostrar una serie numerosa de resultados en las aplicaciones, esto genera un gran consumo de recursos del servidor de base de datos, de la red y de la aplicación cliente. Para resolver el inconveniente se utiliza la paginación, la cual consiste en dividir los resultados en grupos manejable de registros y mostrarlos en distintas páginas. Permitiendo al usuario navegar sobre el conjunto de páginas.
  • 31. SQL Dinámico Que pasa si en algún momento fuese el propio programa creado el que tuviese que decidir, en tiempo de ejecución, las sentencias a usar o las tablas a referenciar. SQL dinámico, no codificar de forma fija una sentencia de SQL. SQL Dinamico permite que sea el programa el que construya dicha(s) sentencia(s), en una de sus áreas de datos y en tiempo de ejecución, y luego traspase el texto de la(s) misma(s) a la base de datos para que se ejecute en tiempo real. La ejecución dinámica permite que la sentencia SQL que va a ejecutar nuestro servidor de base de datos no está escrita en ningún lugar, sino que se encuentra asignada a una variable de tipo texto y se crea cada vez que tenemos que ejecutarla.
  • 32. SQL Dinámico  SQL dinámico creado en las aplicaciones: es cuando insertamos instrucciones sql (select, insert, update, delete) en el código fuente de nuestra aplicación. SQL dinámico creado en el servidor de base de datos: Generalmente se utiliza en los procedimientos almacenados,
  • 33. SQL Dinámico CREATE PROCEDURE OrdenarPor@Columnavarchar(50) AS DECLARE @sSQLvarchar(50) SET @sSQL=’SELECT * FROMMiTablaORDER BY ’ + @Columna EXEC @sSQL Problemas de seguridad permite realizar inyeccion de codigo(la finalización prematura de una cadena de texto y la anexión de un comando nuevo) SQL por la variable @Columna CREATE PROCEDURE OrdenarPor@Columnavarchar(50) AS SELECT * FROM miTablaORDER BY CASE@Columna WHEN 'columna1' THEN columna1 WHEN 'columna2' THEN columna2 WHEN 'columna3' THEN columna3 END
  • 34. Data Access Layer (DAL) usingSystem; usingSystem.Data; usingSystem.Data.SqlClient; publicpartialclassSelectRecords : System.Web.UI.Page{ protectedvoidPage_Load(objectsender, EventArgs e) { } protectedvoid Button1_Click(objectsender, EventArgs e) { // Consigue todos los registros sin parametros DataTabledataTable = DAL.ExecuteDataTable("sp_GetAllUsers", null); GridView1.DataSource = dataTable; GridView1.DataBind(); } protectedvoid Button2_Click(objectsender, EventArgs e) { SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@Name", "AsifIqbal"); // GetAll Records with NAME Parameter DataTabledataTable = DAL.ExecuteDataTable("sp_GetAllUsersByName", param); GridView1.DataSource = dataTable; GridView1.DataBind(); } }
  • 35. SQL DESDE LA APLICACION  SQL ad hoc son script embedidosdirectamente en el codigo desarrollar una aplicación que envía consultas de SQL ad hoc(sistema permite al usuario personalizar una consulta en tiempo real, en vez de estar atado a las consultas prediseñadas)directamente del cliente o de la capa intermedia en lugar de ejecutar procedimientos almacenados. El problema con procedimientos almacenados es que necesitan volver a escribir para cada base de datos, la mayoría de sentencia de SQL se pueden escribir de modo que funciona en todos los RDBMS importante. Como un ISV tenemos clientes con SQL Server y Oracle, la próxima semana una persona de ventas puede vender nuestro software a alguien con DB2 Usted tiene que decidir entre una alta escalabilidad mediante la inclusión de TODOSsu lógica de negocio en los procedimientos almacenados o de mantenimiento de alta /independencia db. Teniendo en cuenta que HW es barata y mano de obra es carasiempre me apoyan en este último.
  • 36. SQL DESDE LA APLICACION  la regla es que los datos de consultas de la base de datos debe ser a través de vista, y los datos de actualizacioneliminacion e insercion se realiza a través de un procedimiento. Si desea volver a utilizar este software e instalarlo en otra dependencia de plataformas de producción de base de datos es una limitación muy grande. Anddoing an O/R mapper that needs to support multiple databases is clearly easier using ad-hoc SQL.
  • 37. TABLESPACES POSTGRESQL Tablespaces You can also specify the default tablespace when you create a new database. A tablespace is the place where database objects are stored on disk. If you’re familiar with SQL Server, you will know this as a filegroup. This is a more advanced feature and can be used to achieve incredible performance benefits by spreading physical database objects across multiple physical disks. Like collation, we’re not going to worry about tablespaces for now, but it is important to know that the feature is available. ¿Qué es?Lostablespaces son referencias a ubicaciones físicas del almacenamiento de bases de datos y/o de los objetos que éste contiene. ¿Cuándo debo utilizarlo?Esrecomendable utilizar tablespaces cuando se quiere especificar ubicaciones alternativas para determinadas bases de datos o tablas, como cuando queremos que ciertas tablas estén en otros discos distintos a los que se encuentran por ejemplo, para ubicar los tablespaces con data al que se accesa muy raras veces, en dispositivos de almacenamientos lentos y a los tablespaces con data a la que constantemente se accede, en medios de almacenamiento mucho mas rápidos. CREATE TABLESPACE ram_space LOCATION '/mnt/ram0/pgspace'; CREATE TABLESPACE create table test_ram (i integer, name text) tablespaceram_space; CREATE TABLE
  • 38. TABLESPACES POSTGRESQL Para implementar esto debes crear un para de directorios donde postgres va a guardar los datos. Si esta trabajando en linux, debes hacer que el dueño del árbol de directorios se postgres. Por ejemplo: 1) crear directorios en el disco para el tablespace: mkdir -p /tablespaces/datos1 mkdir -p /tablespaces/datos2 2) dentro de postgres createtablespace datos1 location '/tablespaces/datos1' ; createtablespace datos2 location '/tablespaces/datos2' ; 3) dentro de postgres. alter table <nombre_tabla> set tablespace datos1; alter table <nombre_tabla> set tablespace datos2; tene en cuenta que los tablespaces debes colocarlos uno en cada disco.