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

Problema con UPDATE

Estas en el tema de Problema con UPDATE en el foro de PostgreSQL en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/09/2009, 16:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 121
Antigüedad: 15 años, 7 meses
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
  #2 (permalink)  
Antiguo 15/09/2009, 19:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con UPDATE

chimaria...
Para que el update tuviera efecto, no sería necesario cerrar la cadena y concatenar cada que se cambie un parámetro?
la forma mas sencilla de ir identificando errores es probar con una sentencia update mas simple.

prueba con:
sql='update conceptos set clase=9 where id_concepto=8';
si corre, el problema se reduce a la concatenación, si no corre se sabe que el problema lo genera otra linea de codigo.

haz estas pruebas y nos cuentas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/09/2009, 09:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 121
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema con UPDATE

Saludos huesos pero una pregunta la sintaxis es correcta asignar el update a una variable y luego en otra variable hacer el select??????

Sabes que intente correr el script actualizando solo un campo pero no lo hiz, pero yo corro solamente el script UPDATE CONCEPTOS SET clase = 2 WHERE idconcepto = 1
y esto si lo hace, el problema es en la sintaxis creo yo......
  #4 (permalink)  
Antiguo 16/09/2009, 09:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con UPDATE

Cita:
Saludos huesos pero una pregunta la sintaxis es correcta asignar el update a una variable y luego en otra variable hacer el select??????
No me había percatado que la sentencia en la variable sql es un update. Y que mas abajo tratas de manejarlo como si fuera una consulta. Esto no es posible chimaria. Después del update ejecutalo. Después realiza una variable que haga un select y esa si la metes dentro del for.

Según entiendo, quieres retornar el contenido de la tabla despúes de haber hecho los cambios respectivos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 16/09/2009, 13:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 121
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema con UPDATE

exactamente quiero retornar el registro una vez modificado, disulpa la pregunta pero es que nos e mucho de postgre como hago para ejecutar un update en postgre porque en sql nada mas colocas update y listo?????
  #6 (permalink)  
Antiguo 16/09/2009, 14:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con UPDATE

el update lo ejecutas con la clausula execute.

execute sql;
ahí debe hacer la actualización. Ya después debes hacer el select respectivo.

select *from tabla where concepto = idcocepto en una nueva variable. Esta ya va dentro del for como lo tienes actualmente.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 12:02.