Buscar

Gregorio J. Bolívar B.

Blog del conocimiento informático, de ayuda a los usuarios que necesiten de tips tecnológicos. . . . Perfil=> https://www.linkedin.com/in/gregorio-bolivar

Categoría

Base de Datos

Explicación de cómo hacer una consulta con detalles múltiple en SQLServer.

Proceso encargado de hacer una consulta que retorne una lista detalles de una consulta con detalles múltiple en Sql Server en este caso fue probado en la versión 2008, esta ejemplo es fundamental para ser usado en cualquier caso que a merite.

Vamos a proceder hacer unos

Tabla Usuarios
CREATE TABLE usuarios (
id INT IDENTITY (1, 1) NOT NULL,
apellidos VARCHAR(50) NOT NULL,
nombres VARCHAR(50) NOT NULL,
usuario VARCHAR(20) NOT NULL,
correo VARCHAR(50) NOT NULL,
clave CHAR(50) NOT NULL,
CONSTRAINT pk_usuarios PRIMARY KEY(id)
);

INSERT INTO usuarios (apellidos,nombres,usuario,correo,clave) VALUES('BLANCO','HUMBERTO','hblanco','hblanco@gmail.com','501fafd714de5faa708c35f07c291c21');

INSERT INTO usuarios (apellidos,nombres,usuario,correo,clave) VALUES('PEREZ','ROBERTO','rparez','rparez@gmail.com','a4a97ffc170ec7ab32b85b2129c69c50');

INSERT INTO usuarios (apellidos,nombres,usuario,correo,clave) VALUES('BOLIVAR','GREGORIO','gbolivar','elalconxvii@gmail.com','c707dce7b5a990e349c873268cf5a968');

Tablas Perfiles
CREATE TABLE perfil (
id BIGINT IDENTITY (1, 1) NOT NULL,
detalle VARCHAR(50) NOT NULL,
CONSTRAINT pk_perfil PRIMARY KEY(id)
);

INSERT INTO perfil (detalle) VALUES('Admin');
INSERT INTO perfil (detalle) VALUES('Operador');
INSERT INTO perfil (detalle) VALUES('Secretaria');
INSERT INTO perfil (detalle) VALUES('Supervisor');
INSERT INTO perfil (detalle) VALUES('Coordinador');

Tabla UsuariosPerfiles
CREATE TABLE usuario_perfil (
perfil_id BIGINT NOT NULL,
usuarios_id BIGINT NOT NULL
CONSTRAINT pk_usuario_perfil PRIMARY KEY(perfil_id,usuarios_id)
);

INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(2,1);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(1,1);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(2,2);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(3,2);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(1,3);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(2,3);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(3,3);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(4,3);
INSERT INTO usuario_perfil (perfil_id, usuarios_id) VALUES(5,3);

Desafío
Queremos lograr hacer una consulta donde podemos podamos extraer los usuarios asociados con sus perfiles separados por un carácter especial en este caso coma (,) con el objetivo de que se haga fácil hacer la visualización de los datos.

SELECT c.usuario, STUFF((SELECT ',' + a.detalle from perfil AS a
INNER JOIN usuario_perfil AS b ON b.perfil_id=a.id
WHERE b.usuarios_id=c.id GROUP BY a.detalle FOR XML PATH('')),1 ,1, '') AS detalle FROM usuarios AS c

resultado en hacer una consulta con detalles múltiple.

Anuncios

Software Universal SQL Cliente Free Multi-Platforma – openSource

Les traigo a conocer para los que no la conocía a DBeaver openSource que te permite administrar diferentes bases de datos en en al momento haciendo diferentes culsultas y puedes integrar diferentes motores de bases de datos es un cliente global, solo agregas las conexion nueva y listo ya te conectas, ademas puedes ver las entidades hacer consulta con su tipado de autocompletar y ver el diagrama ya ordenado sin necesidad de perder tiempo en eso ya te la ordena.

No es que le de publicidad si no por todo lo que puedes hacer y gratis, ademas el tiempo de ejecución es super rapido mayor que el usaba anterior mente el conocido por todos MYSQL Workbench, tienes todo en usa sola herramienta multiple y administra tus base de datos Mysql, Postgresql, Redis, y mas.

http://dbeaver.jkiss.org/

http://dbeaver.jkiss.org/docs/

Universal SQL Client Free multi-platform
Universal SQL Client Free multi-platform database tool for developers, SQL programmers, database administrators and analysts. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, Teradata, MongoDB, Cassandra, Redis, etc
Pantalla completa del Universal SQL Client Free multi-platform

Ver inventario de trigger de tu base de datos en mysql

Buenas espero que se encuentren bien luego de pasar tiempo sin escribir aca le dejo un sql para saber los inventarios de trigger que tienen en una tabla debido que esto pasa a diario tenemos sistemas y la gente cuendo llega nueva a tomar el trabajo no sabe que tiene por dentro en la base de datos, por eso es importante saber y tener a la mano un inventario de los trigger que tenemos en todo nuestro servidor en mysql

# SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_STATEMENT, ACTION_TIMING, DEFINER  FROM information_schema.TRIGGERS

Detalle de cada campo que debe traer.

TRIGGER_SCHEMA = Base de datos que esta ejecutando.
TRIGGER_NAME = Nombre del Trigger.
EVENT_MANIPULATION = acción del evento de la opeacion Actualizar, insertar o eliminar.
EVENT_OBJECT_TABLE = En la entidad que efectua o leventa el disparador.
ACTION_STATEMENT = El contenido del Trigger.
ACTION_TIMING = acción del evento si es ante o despues.
DEFINER = Cual usuario y host esta ejecutando el trigger.

Conexión a internet desde TP-3420 + 3G de Movilnet E173

Buenas espero que se encuentren bien le traigo esta solución que me quito un par de horas en lograr la conexión a internet mediante el modem de internet de movilnet desde el equipo TP-3420, en este caso funciono para movilnet para las demas operadora deben es revisar es el APN de la operadora aca le dejo la configuración que funciono exactamente.

 

Configuración con el modem 3G de movilnet
Configuración con el modem 3G de movilnet

 

Extraer datos de una tabla recursiva en postgresql, es muy útil.

Este es necesario cuando necesitamos montar una tabla que no sabemos hasta cuantos niveles puede tener, le voy  dejar una función para que estraigan los datos, en ocaciones cuando la tabla tiene una descripción muy extensa puede dar un error similar al siguiente: ERROR:  el valor es demasiado largo para el tipo character varying(16)
CONTEXTO:  PL/pgSQL function “aranceles” line 10 at sentencia SQL

Pero ya con esta función esta solventado el problema.

Primero vamos a tener una tabla

CREATE TABLE recursividad
(
  id bigint NOT NULL,
  codigo character varying(16),
  posession character varying(2),
  titulo character varying(2),
  sub_titulo character varying(2),
  identificador character varying(10),
  detalles text,
  detalles2 text,
  cod_recursividad bigint,
  CONSTRAINT recursividad_pkey PRIMARY KEY (id )
)

Debido que si necesitamos solo algunos datos es importante crear una definición del tipo del dato para que no de error y solo utilizar los campos necesario.

CREATE TYPE recursividadtype as (id bigint, detalle text, cod_recursividad bigint );

Creamos la función que ejecutara y buscara la recursividad

CREATE OR REPLACE FUNCTION aranceles(id_tabla integer)
RETURNS text AS
$BODY$
DECLARE
    idente INTEGER :=id_tabla;
    nombre TEXT :=””;
    nombre2 TEXT :=””;
    row arancelestype%ROWTYPE;
BEGIN
    SELECT id, descripcion, cod_recursividad INTO row FROM recursividad WHERE id = idente;
    nombre:= row.detalles;
    idente:= row.cod_recursividad;
    LOOP
        IF(idente IS NULL) THEN
            EXIT;
        ELSE
            SELECT id, detalles, cod_recursividad INTO row FROM recursividad WHERE id = idente;
            nombre2:= row.detalles;
            nombre:= nombre2 ||’\’|| nombre;
            idente:= row.cod_recursividad;
        END IF;
        
    END LOOP;
    RETURN nombre;
END;
$BODY$
LANGUAGE ‘plpgsql’;

Ya puedes insertar los datos en la base de datosrelacionadocon la recursividad

CREATE TABLE recursividad
(
  id bigint NOT NULL,
  codigo character varying(16),
  posession character varying(2),
  titulo character varying(2),
  sub_titulo character varying(2),
  identificador character varying(10),
  detalles text,
  detalles2 text,
  cod_recursividad bigint,
  CONSTRAINT recursividad_pkey PRIMARY KEY (id )
)

INSERT INTO recursividad VALUES (1,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 1',NUL);
INSERT INTO recursividad VALUES (2,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 2',1);
INSERT INTO recursividad VALUES (3,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 3',2);
INSERT INTO recursividad VALUES (4,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 4',3);
INSERT INTO recursividad VALUES (5,'12345567', '12','34','55,'67','Cat6','DESCRIPCION 5',4);

luego ejecuta tu query para ver el detalle

select aranceles(5)

Tendra un resultado de la siguiente manera:

DESCRIPCION 1 \ DESCRIPCION 2 \ DESCRIPCION 3 \ DESCRIPCION 4 \ DESCRIPCION 5

Blog de WordPress.com.

Subir ↑