Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/09/2009, 16:21
chimaria
 
Fecha de Ingreso: marzo-2009
Mensajes: 121
Antigüedad: 15 años, 1 mes
Puntos: 1
Problema con UPDATE

Saludos de nuevo yo por aqui
Tengo un problemita con un UPDATE que cuando lo corro me genera el siguiente error
ERROR: cannot open non-SELECT query as cursor
CONTEXT: PL/pgSQL function "act_concepto" line 20 at for over execute statement
y nose a que se debe ya que soy nueva en esto de postgre


Aqui le smuestro el procedimiento:
CREATE OR REPLACE FUNCTION act_concepto (id_concepto int4, concepto "varchar", descripcion "varchar", clase int4, tipo int4, status_convenio int4, afecta_prestaciones int4, afecta_utilidades int4, afecta_vacaciones int4, unidad int4, formula "varchar", afecta_liquidacion int4, afecta_sueldomensual int4, ingreso_mensual float8, vigente int4, asociado int4)
RETURNS SETOF conceptos AS
$BODY$
DECLARE

fila conceptos%rowtype;
sql character varying;
BEGIN
sql = 'UPDATE CONCEPTOS SET clase = clase,
tipo = tipo,
status_convenio = status_convenio,
afecta_prestaciones = afecta_prestaciones,
afecta_utilidades = afecta_utilidades,
afecta_vacaciones = afecta_vacaciones,
unidad = unidad,
formula = formula,
afecta_liquidacion = afecta_liquidacion,
afecta_sueldomensual = afecta_sueldomensual,
ingreso_mensual = ingreso_mensual,
vigente = vigente,
asociado = asociado
WHERE idconcepto like ''%' || ltrim(rtrim(id_concepto)) || '%''';
FOR fila IN EXECUTE sql
LOOP
RETURN NEXT fila;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION act_concepto(id_concepto int4, concepto "varchar", descripcion "varchar", clase int4, tipo int4, status_convenio int4, afecta_prestaciones int4, afecta_utilidades int4, afecta_vacaciones int4, unidad int4, formula "varchar", afecta_liquidacion int4, afecta_sueldomensual int4, ingreso_mensual float8, vigente int4, asociado int4) OWNER TO postgres;

Lo corro de esta forma y aqui es cuando me muestra el error
SELECT * from act_concepto (1,'Pago de vacaciones','Pago de vacacione', 2,3,0,0,0,0,3,' sueldo/30',0,0,0,0,0);


Gracias de antemano