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 
<asotolo...@gmail.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 
<asotolo...@gmail.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  
  
   
 
  
     
 
 

 
  

Responder a