Mostrando entradas con la etiqueta Programacion SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programacion SQL. Mostrar todas las entradas

13 de agosto de 2009

Copiar tabla y quitar acentos de una tabla en Oracle

Como ya hice en el pasado, os paso un par de cosillas mas de sql que la verdad no dejan de ser una tontería pero que para mi son la mar de utiles para mis básicos conocimientos sql, y recordar que en el futuro los mejores programadores no serán los que mejor programen, si no los que encuentren antes la solución.



Copiar una tabla, es importante recordaros que todas las FK no serán copiadas de esta manera, así que tenerlo en cuenta:



create table tabla_copiada as (SELECT * FROM tabla _que_ copio);


Si luego quereis borrarla pues:


drop table tabla_copiada;



Quitar acentos de una tabla, aqui os propongo dos maneras de hacerlo, una sencillita y otra mucho mas compleja utilizando un cursor:


Sencillo:


UPDATE TABLA_CON_ACENTOS
SET NOMBRE= REPLACE(NOMBRE, 'á','a','é','e','í','i','ó','o','ú','u'),
APELLIDO1= REPLACE(APELLIDO1, 'á','a','é','e','í','i','ó','o','ú','u'),
APELLIDO2= REPLACE(APELLIDO2, 'á','a','é','e','í','i','ó','o','ú','u');



Complejo usando un cursor(no recomendada):


DECLARE
CURSOR USU IS SELECT NOMBRE, APELLIDO1, APELLIDO2 FROM TABLA_CON_ACENTOS;
REG_USU TABLA_CON_ACENTOS%ROWTYPE;
NOM_USU TABLA_CON_ACENTOS.NOMBRE%TYPE;
APE1_USU TABLA_CON_ACENTOS.APELLIDO1%TYPE;
APE2_USU TABLA_CON_ACENTOS.APELLIDO2%TYPE;
BEGIN
OPEN USU;
LOOP
FETCH USU INTO REG_USU;
EXIT WHEN REG_USU%NOTFOUND;
UPDATE TABLA_CON_ACENTOS REPLACE(REG_USU.NOMBRE, 'á', 'a', 'é','e', 'í','i','ó','o','ú','u') WHERE REG_USU.NIF=TABLA_CON_ACENTOS.NIF;
UPDATE TABLA_CON_ACENTOS REPLACE(REG_USU.APELLIDO1, 'á', 'a', 'é','e', 'í','i','ó','o','ú','u') WHERE REG_USU.NIF=TABLA_CON_ACENTOS.NIF;
UPDATE TABLA_CON_ACENTOS REPLACE(REG_USU.APELLIDO2, 'á', 'a', 'é','e', 'í','i','ó','o','ú','u') WHERE REG_USU.NIF=TABLA_CON_ACENTOS.NIF;
END LOOP;
CLOSE USU;
END;


Espero serviros de ayuda, yo por lo menos lo dejo aqui como "base de conocimiento"





14 de julio de 2009

Reiniciar una secuencia de Oracle

Hoy en el trabajo he tenido que reiniciar una secuencia que estaba dentro de un trigger (disparador) a un determinado valor (porque había fallado varias veces y necesitaba ponerla en el último valor correcto conocido), y bueno, yo la verdad es que no dejo de ser un programador junior y cada cosa que resuelvo para mi es una victoria que puede olvidarse con el tiempo, es por ello, que voy a poner aqui las 4 lineas que he realizado para que si en el futuro alguien lo busca en internet, tenga un fuente mas de san Google :)

He aquí 2 maneras de hacerlo, la chapucera y la apañada:

Chapucera: Modifico la secuencia haciendo que ahora se incremente en la cantidad negativa que me hace falta para llegar al último valor bueno conocido, despues incremento uno para "ejecutar" y despues la vuelvo a modificar para ponerlo normal.

alter sequence TABLA_SEQ increment by -260;

SELECT TABLA_SEQ.NEXTVAL from dual;

alter sequence TABLA_SEQ increment by 1;

Apañada: Paro el trigger, borro la secuencia, la creo de cero exactamente igual pero poniendola que empiece en el valor que necesito OJO, ese va a ser el primer valor que dé el nextVal, vuelvo a habilitar el trigger, y ya lo tenemos. No digo que sea la mejor pero si que apañada :)

alter TRIGGER TRIGGER disable;

DROP SEQUENCE TABLA_SEQ;

CREATE SEQUENCE TABLA_SEQ

START WITH 80

MAXVALUE 999

MINVALUE 1

NOCYCLE

CACHE 20

NOORDER;

alter TRIGGER TRIGGER enable;

Fuente: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=178