From: | Alejandro Carrillo <fasterzip(at)yahoo(dot)es> |
---|---|
To: | Anthony Sotolongo <asotolongo(at)gmail(dot)com>, Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Capturar cual unique key esta en excepción |
Date: | 2016-01-26 05:18:22 |
Message-ID: | 1385763631.120955.1453785502898.JavaMail.yahoo@mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Muchas gracias por la solución. Cambiaré mis fuentes ya q es más optima que buscando textos
El Domingo 20 de diciembre de 2015 13:00, Anthony Sotolongo <asotolongo(at)gmail(dot)com> escribió:
Hola nuevamente, creo que tu solución funciona bien, pero si puedes obtener el nombre del CONSTRAINT afectado con el item CONSTRAINT_NAME como te sugería en el correo anterior, que pudiera ser unas de tus soluciones, por ejemplo:
CREATE TABLE alejandro
(
col1 integer,
col2 integer,
CONSTRAINT alejandro_col1_key UNIQUE (col1),
CONSTRAINT alejandro_col2_key UNIQUE (col2)
)
CREATE OR REPLACE FUNCTION insertar(int,int) RETURNS text AS $$
DECLARE
text_var1 text;
BEGIN
BEGIN
INSERT INTO alejandro VALUES ($1,$2);
EXCEPTION WHEN unique_violation THEN
GET STACKED DIAGNOSTICS text_var1 = CONSTRAINT_NAME;
RAISE exception 'La contraint afectada es %',text_var1;
END;
return 'OK';
END;
$$ LANGUAGE plpgsql;
si ejecuto
select insertar(1,2);
OK
si luego ejecuto
select insertar(1,10);
ERROR: La contraint afectada es alejandro_col1_key
si ejecuto
select insertar(10,2);
ERROR: La contraint afectada es alejandro_col2_key
saludos
El 12/20/2015 a las 2:23 PM, Alejandro Carrillo escribió:
Hola,
Si revisé pero no encontré nada acerca del objeto afectado, por ahora la única solución es: when unique_violation then GET STACKED DIAGNOSTICS l_RETURNED_SQLSTATE = RETURNED_SQLSTATE, l_MESSAGE_TEXT = MESSAGE_TEXT, l_PG_EXCEPTION_DETAIL = PG_EXCEPTION_DETAIL; if position('uk_cliente' in l_MESSAGE_TEXT)> 0 then s_error_msj:= 'Ya existe un tipo_documento y numero_documento que coinciden con los ingresados. Por favor ingrese un tipo y documento diferentes o solicite restaurar la contraseña.'; end if; raise exception '%', s_error_msj;
El Sábado 19 de diciembre de 2015 15:08, Anthony Sotolongo <asotolongo(at)gmail(dot)com> escribió:
Hola Alejandro, revisa los Error Diagnostics Values y tal vez te pueda dar la pista de la UNIQUE que te da el error, utiliza el ITEM que requieras(creo que COLUMN_NAME o CONSTRAINT_NAME o PG_EXCEPTION_DETAIL o PG_EXCEPTION_HINT, pueden ayudarte).
te recomiendo:
http://www.postgresql.org/docs/9.4/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING
Saludos
El 12/19/2015 a las 3:04 PM, Alejandro Carrillo escribió:
Buen dia,
Rato sin hablar en la lista. Tengo una duda, estoy creando un function en Postgresql 9.4 que insertará datos en una tabla, sin embargo esta tabla tiene 2 o más unique constraint y necesito saber unicamente el nombre de cual de las unique constraint ha sido afectada, ej:
create or replace function insertar( p1 character varying, p2 character varying, p3 character varying ) RETURNS void AS $$ begin inser into ...;
exception when unique_violation then -- ACA DEBO OBTENER UNICAMENTE EL NOMBRE EXACTO DE LA UNIQUE KEY AFECTADA para efectos de mostrar un mensaje de error personalizado. end; $$;
Cordial saludo
From | Date | Subject | |
---|---|---|---|
Next Message | Eduardo Villagrán Morales | 2016-01-26 11:29:10 | RE: no conecta pc con Win XP |
Previous Message | Ivan Perales M. | 2016-01-25 18:24:15 | Re: no conecta pc con Win XP |