Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Error en una funcion utilizando boolean

Estas en el tema de Error en una funcion utilizando boolean en el foro de PostgreSQL en Foros del Web. Hola, hace unos dias puse aquí un tema y no he tenido respuesta, mi problema es con una función que utiliza datos booleanos y al ...
  #1 (permalink)  
Antiguo 21/05/2007, 10:56
 
Fecha de Ingreso: enero-2007
Mensajes: 10
Antigüedad: 17 años, 2 meses
Puntos: 0
Error en una funcion utilizando boolean

Hola, hace unos dias puse aquí un tema y no he tenido respuesta, mi problema es con una función que utiliza datos booleanos y al momento de insertar (copiar) de una tabla original a una tabla "copia" me aparece el siguiente error: ERROR: operator does not exist: text || boolean.

Si alguien de ustedes me pudiera dar una pista o recomendar alguna página, se los agradecería bastante.

Gracias!!!!!
  #2 (permalink)  
Antiguo 22/05/2007, 08:33
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Error en una funcion utilizando boolean

montsezam pon el codigo de la funcion, pero en principio el error parece claro
ERROR: operator does not exist: text || boolean.
no existe un operador que realice un OR logico entre un dato de tipo text y otro dato de tipo boolean.

Comprueba el codigo y lee los errores!

Un saludo
  #3 (permalink)  
Antiguo 22/05/2007, 09:04
 
Fecha de Ingreso: enero-2007
Mensajes: 10
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Error en una funcion utilizando boolean

Hola Seyko, tienes mucha razon lei el error pero bueno...te pongo el codigo de la funcion y a ver si me puedes ayudar a ver que puedo hacerle.

CREATE OR REPLACE FUNCTION SAC_TARJETA_CREDITO() RETURNS TRIGGER AS
$BODY$
DECLARE

//TARJETA_CREDITO_VALIDA es BOOLEAN;
//PREFERIDA es BOOLEAN;

BEGIN


IF TG_OP='INSERT' THEN
TARJETA_CREDITO_VALIDA=NEW.TARJETA_CREDITO_VALIDA;
PREFERIDA=NEW.PREFERIDA;
PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin',
'INSERT INTO SAC_TARJETA_CREDITO values ('||NEW.ID_TARJETA_CREDITO||','||NEW.ID_PERSONA||' ,'||CAST(TARJETA_CREDITO_VALIDA AS BOOLEAN)||','||NEW.NUMERO_TARJETA||','||NEW.EXPEDI DA||','||NEW.EXPIRA||',
'||NEW.ANTIGUEDAD||','||NEW.ID_TIPO_TARJETA||','|| CAST(PREFERIDA AS BOOLEAN)||','||NEW.NUMERO_SEGURIDAD||');');
RETURN NEW;


ELSEIF TG_OP='DELETE' THEN

PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin', 'DELETE FROM SAC_TARJETA_CREDITO WHERE '||OLD.ID_TARJETA_CREDITO||' = SAC_TARJETA_CREDITO.ID_TARJETA_CREDITO;');
RETURN OLD;


ELSEIF TG_OP='UPDATE' THEN

PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin',
'UPDATE SAC_TARJETA_CREDITO SET ID_TARJETA_CREDITO= '||NEW.ID_TARJETA_CREDITO||' , ID_PERSONA= '||NEW.ID_PERSONA||',
TARJETA_CREDITO_VALIDA ='||NEW.TARJETA_CREDITO_VALIDA||', NUMERO_TARJETA ='||NEW.NUMERO_TARJETA||', EXPEDIDA = '||NEW.EXPEDIDA||', EXPIRA = '||NEW.EXPIRA||', ANTIGUEDAD ='||NEW.ANTIGUEDAD||'
, ID_TIPO_TARJETA = '||ID_TIPO_TARJETA||' , PREFERIDA = '||NEW.PREFERIDA||' , NUMERO_SEGURIDAD = ' ||NEW.NUMERO_SEGURIDAD||' WHERE '||OLD.ID_TARJETA_CREDITO||'=SAC_TARJETA_CREDITO.I D_TARJETA_CREDITO);');
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql';
  #4 (permalink)  
Antiguo 22/05/2007, 10:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Error en una funcion utilizando boolean

A ver si lo he entendido bien, los valores en la tabla antigua de TARJETA Y PREFERIDA son boolean y los valores de la tabla nueva tambien son boolean??

Si esto es correcto, el problema es que no te deja concatenar el valor del boolean, no?

Si este es el problema, puedes simplemente convertir el boolean a texto, y al insertar texto en un campo boolean lo convierte.

Puede que no lo haya entendio bien, si es asi mandame un privado y contactamos para arreglarlo.

Un saludo
  #5 (permalink)  
Antiguo 22/05/2007, 12:53
 
Fecha de Ingreso: enero-2007
Mensajes: 10
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Error en una funcion utilizando boolean

Asi es mi querido seyko, los datos deben quedar igual que en la tabla origen, ya he modificado la funcion, por recomendacion en otro foro, y ha quedado asi:

CREATE OR REPLACE FUNCTION SAC_TARJETA_CREDITO() RETURNS TRIGGER AS
$BODY$
DECLARE

BEGIN


IF TG_OP='INSERT' THEN
TARJETA_CREDITO_VALIDA=CAST(NEW.TARJETA_CREDITO_VA LIDA AS VARCHAR);
PREFERIDA=CAST(NEW.PREFERIDA AS VARCHAR);
PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin',
'INSERT INTO SAC_TARJETA_CREDITO values ('||NEW.ID_TARJETA_CREDITO||','||NEW.ID_PERSONA||' ,'||NEW.TARJETA_CREDITO_VALIDA||','||NEW.NUMERO_TA RJETA||','||NEW.EXPEDIDA||','||NEW.EXPIRA||',
'||NEW.ANTIGUEDAD||','||NEW.ID_TIPO_TARJETA||','|| NEW.PREFERIDA||','||NEW.NUMERO_SEGURIDAD||');');
RETURN NEW;


ELSEIF TG_OP='DELETE' THEN

PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin', 'DELETE FROM SAC_TARJETA_CREDITO WHERE '||OLD.ID_TARJETA_CREDITO||' = SAC_TARJETA_CREDITO.ID_TARJETA_CREDITO;');
RETURN OLD;


ELSEIF TG_OP='UPDATE' THEN

PERFORM dblink_exec('hostaddr=192.168.1.102 port=5432 dbname=BD_SIFAR user=postgres password=admin',
'UPDATE SAC_TARJETA_CREDITO SET ID_TARJETA_CREDITO= '||NEW.ID_TARJETA_CREDITO||' , ID_PERSONA= '||NEW.ID_PERSONA||',
TARJETA_CREDITO_VALIDA ='||NEW.TARJETA_CREDITO_VALIDA||', NUMERO_TARJETA ='||NEW.NUMERO_TARJETA||', EXPEDIDA = '||NEW.EXPEDIDA||', EXPIRA = '||NEW.EXPIRA||', ANTIGUEDAD ='||NEW.ANTIGUEDAD||'
, ID_TIPO_TARJETA = '||ID_TIPO_TARJETA||' , PREFERIDA = '||NEW.PREFERIDA||' , NUMERO_SEGURIDAD = ' ||NEW.NUMERO_SEGURIDAD||' WHERE '||OLD.ID_TARJETA_CREDITO||'=SAC_TARJETA_CREDITO.I D_TARJETA_CREDITO);');
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql';



Pero me sigue saliendo un error que dice lo siguiente:

cannot cast type boolean to character varying

y de igual manera si pongo los campos como caracter y los paso como boolean.

Cualquier idea es bien recibida.

Gracias!!!
  #6 (permalink)  
Antiguo 23/05/2007, 01:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Error en una funcion utilizando boolean

BIen, pues para convertir el boolean puedes hacer algo asi

CASE WHEN TARJETA THEN 'true' ELSE 'false' END

www postgresql.org/docs/8.2/interactive/datatype-boolean.html

Con esto ya te deberia de funcionar.

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.