PostgreSQL - Error en una funcion insertando datos boolean

 
Vista:

Error en una funcion insertando datos boolean

Publicado por montserrat zamudio (3 intervenciones) el 21/05/2007 18:53:54
Hola a todos, espero me puedan ayudar. Trabajo con las version 8.2 de PostgreSQL para Windows; tengo una función que inserta, actualiza y borra datos, una función convencional. La inserción que se realiza primero es mas bien una copia de los datos de una tabla ya existente. Mi problema es que en esa función manejo dos campos con datos tipo boolean y marca un error al momento de insertar los datos que se encuentran en la tabla original, menciona algo de un operador. El error que aparece es el siguiente: ERROR: operator does not exist: text || boolean.

Llevo mucho tiempo con esto, he leido el manual y no menciona nada de otro operador para concatenar que no sea el doble piper. Si me pudieran ayudar con algun comentario, alguna idea se los agradecería bastante.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error en una funcion insertando datos boolean

Publicado por Alex A, Salamanca E. (7 intervenciones) el 22/05/2007 06:27:25
Hola Monserrat:

Como idea y solo como idea, a mi me parece que estas haciendo algo que no se puede, que es concatenar una cadena de texto con un valor verdadero o falso, es decir, por ejemplo:

monserrat || true

Según yo deberías convertir el valor boolean en texto, la verdad es que n me acuerdo ahora si eso se puede hacer o como se hace, investiga o si encuentro algo te respondo a tu correo.


Saludos
Alex Salamanca
Concepción - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en una funcion insertando datos boolean

Publicado por Montse (3 intervenciones) el 22/05/2007 17:14:23
Hola, muchas gracias, estoy investigando como convertir a texto. Te pongo la función Alex por si se te ocurre alguna idea mas.

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

//TARJETA_CREDITO_VALIDA ES TIPO BOOLEAN;
//PREFERIDA ES TIPO 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.EXPEDIDA||','||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.ID_TARJETA_CREDITO);');
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql';
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en una funcion insertando datos boolean

Publicado por Alex A. Salamanca E. (7 intervenciones) el 22/05/2007 18:56:05
Hola Montse:

Creo que deberías intentar según yo usando CAST:

Tu tienes en tu codigo una linea que dice lo siguiente y que si no me equivoco es ese tu problema:

PREFERIDA=NEW.PREFERIDA;

Donde new.preferida es un boolean y al asignarlo a preferida va a aseguir siendo boolean.

Porque no hacer lo siguiente:

PREFERIDA=CAST(NEW.PREFERIDA AS VARCHAR)

y me parece que tienes una linea en donde haces:

CAST(PREFERIDA AS BOOLEAN)

siendo que ya es boolean y resulta que lo quieres juntar con texto, por lo tanto debes convertirlo (CAST) a varchar.

Saludos
Alex Salamanca
Ingeniero (e) Computación e Informática
Concepción - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en una funcion insertando datos boolean

Publicado por Montse (3 intervenciones) el 22/05/2007 19:07:12
hola Alex, ya lo hice como tu me recomendaste pero me sale el siguiente error:

cannot cast type boolean to character varying

Alguna sugerencia para este error??, te agradezco mucho que contestes, he escrito en varios foros y no había tenido ninguna respuesta. Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar