Bases de Datos
Activar o Desactivar Triggers SQLServer
by MigueliTUX on May.06, 2009, under SqlServer, Windows
-- Desactiva el trigger TR_CUENTAS DISABLE TRIGGER TR_CUENTAS ON CUENTAS GO -- activa el trigger TR_CUENTAS ENABLE TRIGGER TR_CUENTAS ON CUENTAS GO -- Desactiva todos los trigger de la tabla CUENTAS ALTER TABLE CUENTAS DISABLE TRIGGER ALL GO -- Activa todos los trigger de la tabla CUENTAS ALTER TABLE CUENTAS ENABLE TRIGGER ALL
Donde CUENTAS es una tabla y TR_CUENTAS es un triggers asociado a dicha tabla
Como conocer la versión de MySQL
by MigueliTUX on Apr.17, 2009, under MySql
5 Comentarios :base de datos, MySql más...Cambiar IDENTITY en SQLSERVER
by MigueliTUX on Apr.08, 2009, under SqlServer
Para cambiar el Identity de una tabla debemos usar el comando
DBCC
por ejemplo tengo la siguiente tabla
Create Table X(Id int Identity(1,1),Nombre Varchar(20))
y he insertado varios registros
insert into X (nombre) values (’Miguel’)
insert into X (nombre) values (’Juan’)
Con eso el ID debe estar en 2 y el siguiente regitro que ingrese será el 3
si le hacemos un delete a la tabla, esta mantendre el identity y si vuelvo a insertar otro registro
el ID será 3.
si quieres que el ID vuelva a 1 debes usar:
DBCC CHECKIDENT (<nombre_tabla>, RESEED, 0)
Donde
<nombre_tabla> es X (segun nuestro ejemplo)
y el 0 corresponde al numero que quieras que parta el Identity, al dejarlo en CERO estas haciendo que el siguiente ID sea 1
Ejemplos de PL/pgSQL
by MigueliTUX on Apr.05, 2009, under PostgreSQL
Buscar un cliente y retornar si existe o no
| CREATE OR REPLACE FUNCTION buscar_cliente (varchar) RETURNS bool AS ‘ DECLARE rut_buscar alias for $1; registro clientes%ROWTYPE; /* Notese que aqui definimos la variable registro del tipo FILA de clientes indicando la tabla, el simbolo % y luego la palabra reservada ROWTYPE */ BEGIN SELECT INTO registro * FROM clientes WHERE rut_cliente = rut_buscar; IF FOUND THEN RETURN true; END IF; RETURN false; END; ‘ LANGUAGE ‘plpgsql’; LLAMADA SELECT buscar_cliente(’12000111-2′); |
Buscar un producto y actualiza su precio segun porcentaje
| CREATE OR REPLACE FUNCTION actualizar_producto (varchar, real) RETURNS bool AS ‘ DECLARE producto ALIAS FOR $1; porcentaje ALIAS FOR $2; registro productos%ROWTYPE; BEGIN SELECT INTO registro * FROM productos WHERE id_producto = producto; IF FOUND THEN UPDATE productos SET precio_venta = precio_venta + (precio_venta * porcentaje) WHERE id_categoria = categoria; RETURN true; END IF; RETURN false; END; ‘ LANGUAGE ‘plpgsql’; LLAMADA SELECT actualizar_producto(’PRO-0540′,0.03) |
Suma 2 valores
| CREATE OR REPLACE FUNCTION suma (real, real) RETURNS real AS ‘ DECLARE valor_1 ALIAS FOR $1; valor_2 ALIAS FOR $2; total real; BEGIN total := valor_1 + valor_2; RETURN total; RETURN; END; ‘ LANGUAGE ‘plpgsql’; LLAMADA SELECT suma(3,4) |
SENTENCIAS DE CONTROL PARA POSTGRES
by MigueliTUX on Apr.05, 2009, under PostgreSQL
Esta sentencia nos permite efectuar un ciclo, su estructura básica es :
| …resto de la funcion… LOOP …sentencias a ejecutar en el ciclo… END LOOP …resto de la funcion… |
Cuando usamos un ciclo LOOP, es necesario darle una salida para que este mismo termine, la sentencia EXIT nos permite finalizar el LOOP y continuar en la sentencia siguente a la salida de éste, generalmente, EXIT está acompañado con la sentencia IF, por ejemplo
| LOOP …resto de la funcion… contador := contador + 1; IF contador >= 10 THEN EXIT; — salida del loop cuando sea mayor o igual que 10 END IF; END LOOP …resto de la funcion… |
Podemos efectuar operaciones de comparación con las sentencias IF, ELSE, los operadores de comparación son los siguientes :
| < menor que … > mayor que … <> distinto a … <= menor o igual que … >= mayor o igual que … = igual que … OR o … AND y … |
Ejemplo :
| …resto de la funcion… IF >= 10 or THEN RETURN true; ELSE |
Existen dos tipos de ciclos FOR, el primero tiene que ver claramente con los ciclos numéricos comunes, es decir, lo que comunmente se usa para efectuar repeticiones, y por otra parte, tenemos un ciclo FOR que nos permite recorrer tablas y procesar sus datos, esta segunda está ligada a sentencias SQL, veamos entonces como se utiliza la sentencia FOR
CASO 1 : SENTENCIA FOR DE PROCESO CICLICO NUMERICO
| FOR <variable> IN <inicio>..<fin> LOOP … SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR … END LOOP; o bien puede usar el FOR de forma inversa FOR <variable> REVERSE <fin>..<inicio> LOOP |
Ejemplo :
| …resto de la funcion… FOR inc IN 1..10 LOOP factorial := factorial * inc; END LOOP; RETURN factorial; …resto de la funcion… |
CASO 2: SENTENCIA FOR APLICADA A PROCESOS DE REGISTROS SQL
| FOR <registro o fila> IN <sentencia SELECT SQL> LOOP … SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR … END LOOP; |
Ejemplo :
| …resto de la funcion… DECLARE registro RECORD; BEGIN FOR registro IN SELECT * FROM productos LOOP stock := registro.sock_actual + 100; … otras sentencias … END LOOP; …resto de la funcion… |
Note que para utilizar esta sentencia FOR debemos declarar una variable de tipo RECORD o registro. RECORD es una palabra reservada para estos casos, y no posee una estructura definida pues no ha sido asignada a ninguna tabla, este tipo de dato nos permite recorrer la tabla de productos y obtener sus valores por medio de esta variable.
La sentencia WHILE se ejecuta de forma muy similar a otros lenguajes de programación, su estructura es la siguiente :
| WHILE <condicion> LOOP … SENTENCIAS A EJECUTAR DENTRO DEL CICLO WHILE … END LOOP; |
Ejemplo :
| …resto de la funcion… WHILE inc <= 10 LOOP factorial := factorial * inc; END LOOP; RETURN factorial; …resto de la funcion… |
Este codigo funciona igual al descrito en el ejemplo del ciclo FOR.