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

comando open para abrir cursores

Estas en el tema de comando open para abrir cursores en el foro de PostgreSQL en Foros del Web. hola a todos, Soy nuevo en Postgres y quería preguntaros: ¿A alguien le ha pasado alguna vez que al intentar utilizar cursores en una consulta ...
  #1 (permalink)  
Antiguo 31/08/2010, 10:40
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 3 meses
Puntos: 0
comando open para abrir cursores

hola a todos,

Soy nuevo en Postgres y quería preguntaros: ¿A alguien le ha pasado alguna vez que al intentar utilizar cursores en una consulta en Pgadmin, se señalan en azul todos los comandos excepto el comando "Open"? Me pasa esto cuando intento utilizar cursores y me sale un error en el panel de salida: "error de sintaxis en o cerca de open"

Si a alguien le ha pasado algo parecido o sabe mejor que yo como funcionan los cursores le agradecería que me dijera algo...

saludos,

psreyes
  #2 (permalink)  
Antiguo 31/08/2010, 10:46
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: comando open para abrir cursores

Pon un ejemplo de lo que abres en pgadmin y como se genera el error que dices.

saludos psreyes
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 31/08/2010, 11:15
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: comando open para abrir cursores

vale,

se trata de una validación de datos. Lo que pretendo es restar valores consecutivos de un mismo campo (campo de valores), de modo que si los valores aumentan mas o menos de un tope son datos incorrectos. Para ello tengo una tabla con 4 campos: "pk", "fecha", "Valores" y una columna "criterio" donde voy a validar los datos del campo valores, introduciendo 0 (la resta es mayor o menor del límite establecido) y 1 (el valor de la resta está dentro de los límites ).

Para restar los valores de los registros consecutivos del campo "valores" estoy intentando utilizar cursores. He hecho un borrador de script (sé que tendré muchos fallos), y el comando open no se señala. El script es:

Declare cursorHR_292 cursor for Select * from HR_292
Where fecha between 2006-06-23 And 2010-02-17
;
Open cursorHR_292
;
Fetch cursorHR_292 from HR_292 INTO pk, fecha, HR, criterio as act
While pk = 1
Begin
Select HR
Fetch Next cursorHR_292 from HR_292 as inc
Do inc - act as resta
End
;
Select resta from HR_292
where resta >= 50 Or resta <=-50
update HR_292 set criterio = 0
;
Close cursorHR_292
;

En el panel de salida me da el siguiente error:

ERROR: error de sintaxis en o cerca de «open»
LÍNEA 5: open cursorHR_292
^

gracias de antemano,

Psreyes
  #4 (permalink)  
Antiguo 31/08/2010, 12:20
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: comando open para abrir cursores

pero hablamos de la apertura de un cursor dentro de una función?
Un primer error que veo es que las fechas en la consulta del cursor las pones sin comillas simples.

haz creado la función? Que espers obtener de todo este proceso? Si nos das mas detalles, te podemos ayudar mas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 01/09/2010, 02:29
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: comando open para abrir cursores

pues la verdad es que no he creado ninguna función. Todo lo que he hecho es lo que pone en el script. ¿Hay que crear una función en el mismo Script?
El resultado que pretendo conseguir es crear un campo "resta" que tome los valores de la resta entre el registro n y el registro n-1 del campo "valores". Tengo entendido que esto se hace mediante cursores, pero no se bien como (es la primera vez que me meto con esto). Una vez que tenga esto ya puedo seguir operando...

muchas gracias,

psreyes
  #6 (permalink)  
Antiguo 01/09/2010, 07:20
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: comando open para abrir cursores

psreyes creo que el camino de aprendizaje lo estas tomando en un orden que no es muy recomendable.
El tema de cursores es un poco denso y requiere conocer un poco mas a fondo el uso de funciones, procedimientos, triggers, variables record y otros cunatos conceptos que te facilitarán mucho el entendimiento de los cursores como tal.

El codigo que pones tiene muchos errores sintacticos y no responde a una logica.
te recomiendo empieces con este corto tutorial de 12 paginas donde explican el principio basico de las funciones, los tipos de variables, las excepciones.

Posterior a esto, aborda el tema de cursores.

Si tienes dudas mas concretas, regresa al foro y te damos una mano.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 01/09/2010, 08:48
 
Fecha de Ingreso: julio-2010
Mensajes: 9
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: comando open para abrir cursores

gracias por tu ayuda... comenzaré como me has dicho por ese tutorial,

saludos y muchas gracias
  #8 (permalink)  
Antiguo 24/11/2010, 06:22
 
Fecha de Ingreso: mayo-2009
Ubicación: Fernando de la Mora - Paraguay
Mensajes: 8
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: comando open para abrir cursores

Hola despues de una busqueda intensa por internet y de muchas pruebas fallidas hasta que se me agotaban las ganas por fin logres que me funcionara un maldito cursor en postgres creo que la gente de postgres no se preocupa tanto en dar un buen ejemplo de uso osea un ejemplo practico solo en sus manuales te describen que significa cada palabra reservada y no se van al grano. pero buep les dejo un ejemplo del que yo hice esta hecho en postgres 9.0
Código SQL:
Ver original
  1. DECLARE vcursor CURSOR FOR SELECT prospecto FROM presupuesto_det WHERE presupuesto = 1;
  2. DECLARE vprospecto BIGINT;
  3.  
  4. BEGIN
  5.  
  6.     OPEN vcursor;
  7.     loop
  8.    
  9.         FETCH vcursor INTO vprospecto;
  10.         EXIT WHEN NOT FOUND;
  11.                
  12.                 -- Aca van las sentencias
  13.         UPDATE prospectos
  14.         SET desde_presupuesto_det ='S', estado_prospecto = 3
  15.         WHERE empresa = 1 AND
  16.             sucursal = 1 AND
  17.             ejercicio = 2010 AND
  18.             prospecto = vprospecto;
  19.        
  20.     END loop;
  21.     CLOSE vcursor;
  22. END;
Saludos desde Paraguay
  #9 (permalink)  
Antiguo 24/11/2010, 07:37
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: comando open para abrir cursores

ciberwapv2

No es que la gente de postgresql no se preocupe por poner ejemplos claros. Lo que pasa es que la documenación de postgresql es tan extensa que debe tratar los temas puntuales.

Por ejemplo... en tu ejemplo lo que tiene que ver con cursores (OPEN, FETCH Y CLOSE) lo explican claramente en la documentación.
El uso de sentencias como "EXIT WHEN NOT FOUND" no solo aplican para cursores, por lo que en otra parte de la documentación está explicado.
El procedimiento que acabas de hacer indica que estas combinando dos herramientas disponibles en postgresql para hacer algo que se ajusta a tus necesidades.

A medida que tomes mas experiencia en postgresql sabras manejar mejor la documentación que sin duda es muy buena.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: comando, open
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:32.