Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2010
Angel Vicente Angel Vicente is offline
Miembro
 
Registrado: may 2006
Posts: 15
Poder: 0
Angel Vicente Va por buen camino
Procedure con cursor

Hola a todos...

Estoy tratando de crear un procediemiento almacenado en firebird 2.1.3, con un cursor. Lo que quiero hacer es un cursor de una SELECT con varios campos de una tabla, y con campos con alias, para procesamientos posteriores (el contenido de estos campos no son calculos directos de los campos existentes). Para las primeras pruebas esto haciendo un procediemiento como el siguiente

DECLARE VARIABLE LISTA CURSOR FOR (
SELECT Historico.CAJA, HISTORICO.MAQUINA, 0 AS Calculo from historico where historico.fechahora BETWEEN '08/02/2010 00:00:00' AND '08/02/2010 23:59:59');
BEGIN
/* Procedure body */
SALIDA = 1;
OPEN Lista;
SUSPEND;
END

pero cuando lo ejecuto, no parece que se abra el cursor; SALIDA es una variable integer de retorno. Haciendo algo parecido en DB2, que es lo que mas conozco, obtengo el resultado de la SELECT del cursor.

La sentencia SELECT en cuestion devuelve registros, si la ejecuto directamente puedo ver los resultados.

¿Que es lo que hago mal?, o ¿que es lo que no estoy haciendo?

Saludos y gracias de antemano
Responder Con Cita
  #2  
Antiguo 13-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, ¿esa sintaxis es de db2?, no entiendo realmente lo que quieres, pero si es un simple select, entonces crea un procedimiento almacenado "normal":

Código:
CREATE PROCEDURE PROCPEDIDOSVENTASCLI ( CODCLIENTE Integer )
RETURNS (
    CODPEDIDO Integer,
    FECHA Timestamp,
    CABPEDIDO Varchar(15),
    etc... )
AS
begin 
   for 
      select Codigo, Fecha, SerieNumero, etc...
      from tbLineasVentas
      where TipoDocumento=2
      and  Cliente=:codCliente 
      order by Fecha desc 
      into :CodPedido, :Fecha, :CabPedido, etc...
   do begin 
     /* esto es sólo un ejemplo, aquí haces lo que necesites */      
     suspend;
   end 
end
Responder Con Cita
  #3  
Antiguo 13-09-2010
Angel Vicente Angel Vicente is offline
Miembro
 
Registrado: may 2006
Posts: 15
Poder: 0
Angel Vicente Va por buen camino
Hola...

No, no es la sintaxis de DB2, es lo que estoy tratando de hacer: como soy un poco novato con Firebird, en un primer momento quiero hacer una select (desde dentro de un procedimiento almacenado), que me devuelva todos los registros que cumplan los criterios; un poco a modo de prueba.

Despues lo que necesito es tambien, todo el contenido de una SELECT con varios campos calculados como alias ademas de los campos de la tabla, pero estos calculos no son "directos", se calcularian a partir de un campo de la SELECT, pero dependieno del contenido de otro campo que no entra en el calculo; por lo que he leido tendria que recorrer toda la SELECT utilizando FOR SELECT; no se si he explicado bien lo que quiero hacer.

Lo que no veo, al menos de una forma clara es la posibilidad de mostrar/devolver todos los registros de la SELECT, me gustaria ir comprobando los procesamientos que hago.

Saludos y gracias
Responder Con Cita
  #4  
Antiguo 13-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Explica entonces exactamente qué quiéres hacer, qué campos tienes, qué resultado esperas obtener, etc.
Responder Con Cita
  #5  
Antiguo 13-09-2010
Angel Vicente Angel Vicente is offline
Miembro
 
Registrado: may 2006
Posts: 15
Poder: 0
Angel Vicente Va por buen camino
Creo que lo he entendido, al menos funciona como deseaba: tengo que declarar en la parte de RETURNS tantas variables como campos del SELECT (por supuesto con sus tipos correspondientes), y despues en el FOR SELECT rellenarlas con INTO :variable y asi obtengo un Recordset con un registro por cada lectura en FOR SELECT.

En DB2 de iSeries es diferente, directamente declaras un cursor, lo abres y ya tienes los registros.

Muchas gracias, de momento ya no tengo la sensacion de haberme atorado.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
llamar a procedure desde otra procedure anubis Varios 23 04-03-2010 18:44:37
puntero a un procedure en un procedure como parametro fcios Varios 2 14-03-2009 03:41:22
Cursor subzero Firebird e Interbase 1 21-02-2005 20:08:42
Cursor fmonte Varios 2 26-08-2004 00:51:46
crear cursor en stored procedure al estilo de sqlserver Nose Firebird e Interbase 4 10-05-2004 18:07:32


La franja horaria es GMT +2. Ahora son las 20:29:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi