[Bulma] duda de SQL
Joan Miquel Torres Rigo
joanmiquel en mallorcaweb.net
Vie Mar 28 23:14:03 CET 2008
A Divendres 28 Març 2008 18:17, Hugo Chinchilla va escriure:
> Hola de nuevo, tengo un problema con una sentencia SQL, estoy
> intentando cambiar en una tabla todo lo que tenga el valor 'post_tag'
> por 'category', cuando ejecuto la consulta " update wp_term_taxonomy
> set taxonomy='category' where taxonomy='post_tag'; " me da un error y
> se para.
> Lo que quiero es que ignore el error y continué con la ejecución,
> ¿existe algún parámetro para eso?
Ninguna base de datos que pueda llamarse como tal te permitirá hacer eso.
Un update es una OPERACIÓN ATÓMICA. Por lo tanto, no puede hacerse "a medias".
O se completa o la BD vuelve al estado inicial.
Lo que sí puedes hacer es "modificar el comportamiento del update" mediante un
trigger sobre la tabla afectada (la última vez que usé mysql aún no habia
triggers, pero creo que ha llovido mucho desde entonces) para evitar que
llegue a producirse el error.
En postgres seria algo así:
-8<---------------------------
create or replace function JumpDuplicated()
Returns trigger
AS '
DECLARE
BEGIN
if (
-- Valor duplicado
(
select count(*)
from wp_term_taxonomy
where taxonomy = NEW.taxonomy
) > 0
) then
-- Generamos un "notice"
-- (Feedback, pero no warning ni error)
-- (Opcional, pero de buen gusto)
RAISE NOTICE ''Ignorando valor duplicado: %'', NEW.taxonomy;
-- Hacemos que la fila se quede como estaba:
RETURN OLD;
else
-- Permitimos que se actualice la fila:
RETURN NEW;
end if;
END;
' LANGUAGE plpgsql;
create trigger UpdateJumpDuplicaded before UPDATE
on wp_term_taxonomy for each row
execute procedure JumpDuplicated();
-8<---------------------------
>
> El error que me da es este:
>
> ERROR 1062 (23000): Duplicate entry '6-category' for key 2
De todos modos aquí hay algo que no cuadra...
La sentencia que has pasado (cito):
> update wp_term_taxonomy set taxonomy='category' where taxonomy='post_tag';
Cambia el valor de la columna taxonomy por 'category' donde anteriormente
valga 'post_tag' y por el error que te da, se entiende que la columna
taxonomy és unique, por lo que sólo puede existir una fila en que que
taxonomy valga 'category' (o cualquier otro valor concreto).
Y por otro lado, si te está dando error por duplicidad de clave, significa que
ya existe OTRA fila en que taxonomy vale 'category'. Por lo tanto ésta fila
no puede actualizarse a ese valor (hasta aquí Ok)
Pero, POR LA MISMA RAZÓN, si en la fila que te ha fallado taxonomy
valia 'post_tag' (si no no hubiera intentado modificarla), NO PUEDE EXISTIR
NINGUNA OTRA FILA en que taxonomy tenga ese mismo valor.
En otras palabras: ¿Qué demonios quieres hacer? Porque en el ejemplo que has
puesto, aún cuando evitaras que se ejecutara el error, conseguirias que se
completara la ejecución del update, si. Pero la única diferencia seria que
perderias más tiempo en hacer nada. (y si lo que quieres es implementar una
espera hay mejores formas de hacerlo... :-P)
>
> Lo que quiero que haga con estas filas es que las deje tal cual, pero
> no se como saltármelas en la consulta.
???
A qué llamas "consulta"? La sentencia que has pasado es un update. No devuelve
nada y, como te he explicado más arriba, en éste caso NO HACE NADA.
¿Para qué quieres que continue?
Saludos.
--
Joan Miquel Torres__________________________________
Linux Registered User #164872
http://www.mallorcaweb.net/joanmiquel
BULMA: http://bulma.net http://breu.bulma.net/?l2301
Demana sempre factura amb el cànon detallat quan compris CDs i
guarda-la: Si existeix la justícia algun dia els mafiosos ens
hauran de tornar el que ens han robat.
http://www.todoscontraelcanon.es
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
AVÍS: NO accept i NO obro ARXIUS ADJUNTS EN FORMATS PROPIETARIS:
* http://www.gnu.org/philosophy/no-word-attachments.es.html *
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Más información sobre la lista de distribución Bulmailing