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 19-02-2004
ronson ronson is offline
Miembro
 
Registrado: feb 2004
Posts: 100
Poder: 21
ronson Va por buen camino
procedimiento almacenado duda

puedo crear un procedimiento almacenado que me devuelva varios registros, me explico imanigaros que hago el siguiente procedimiento:

CREATE PROCEDURE CLIENTES ( D VARCHAR(9))
AS
BEGIN
SELECT * FROM CLIENTES WHERE CLIENTES.DNI=D;
END

esto me daria un error, de que manera podria hacer que em devolviera un puñao de registros?, en caso de que no pudiera hacerlo y tuviera que hacerlo devolviendo sobre varias variables:

CREATE PROCEDURE CLIENTES ( D VARCHAR(9))
RETURNS(DN VARCHAR(9).....)
AS
BEGIN
SELECT * FROM CLIENTES WHERE CLIENTES.DNI=D
INTO:dn.....;

END

SOBRE QUE ME LO DEVOLVERIA?, a ver si me explico si me devuelve varias variables sobre que las guardo?.


Me gustaria saber la manera de hacerlo como la priemra porcion de codigo, osea que me el procedimiento me devolviera varios registros.


NACLU2!!
Responder Con Cita
  #2  
Antiguo 19-02-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Empezado por ronson
Me gustaria saber la manera de hacerlo como la priemra porcion de codigo, osea que me el procedimiento me devolviera varios registros.
Básicamente, tienes que utilizar un bucle FOR SELECT ... Más o menos así (no te aseguro que la sintaxis sea 100% correcta, ya que lo hago con el "compilador mental" -> revisa la documentación):

Código:
CREATE PROCEDURE nombre_proc (lista_parámentros_entrada)
  RETURNS(par_salida_1, par_salida_2, ..., par_salida_n)
AS
BEGIN
  FOR SELECT columna_1, columna_2, ..., columna_n 
    FROM tabla 
    WHERE condición
    INTO :par_salida_1, :par_salida_2, ..., :par_salida_n
  BEGIN /* el bloque BEGIN ... END es opcional */
    /* Procesos que tengas que hacer con cada una de las tuplas 
        devueltas por la SELECT */

    /* Necesario para que devuelva correctamente los parámetros de salida: */
    SUSPEND; 
  END;
END
A destacar que no puedes utilizar SELECT * ..., tienes que pedir las columnas "concretas" que quieres.

Cita:
Empezado por ronson
NACLU2!!
Cloruro Sódico = SAL + U 2 = DOS (original, me gusta)

Saludos.

P.D. Por la temática de tu consulta, tendrías que haberla puesto en el foro "InterBase y Firebird".
Responder Con Cita
  #3  
Antiguo 19-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por kinobi
P.D. Por la temática de tu consulta, tendrías que haberla puesto en el foro "InterBase y Firebird".
Pos p'allí que va!!! (desde Conexión)
Responder Con Cita
  #4  
Antiguo 19-02-2004
ronson ronson is offline
Miembro
 
Registrado: feb 2004
Posts: 100
Poder: 21
ronson Va por buen camino
entonces los parametros de salida no se devuelven

Osea que por lo que he leido yo no puedo hacer un select y que este me devuleva una coleccion de registros, es mas los procedimientos o no devuelven nada o devuelven una sola cosa como en C o en PASCAL no?


al menos eso he leido yo , por lo demas todo ok.

en caso de que me equivique contestadme si no es asi no hace falta que me contesteis para no haceros perder mas tiempo.


muchas gracias!!


NACL U 2 !!
Responder Con Cita
  #5  
Antiguo 19-02-2004
Avatar de haron
haron haron is offline
Miembro
 
Registrado: may 2003
Ubicación: Las Palmas de Gran Canaria
Posts: 310
Poder: 22
haron Va por buen camino
Cita:
Empezado por ronson
Osea que por lo que he leido yo no puedo hacer un select y que este me devuleva una coleccion de registros, es mas los procedimientos o no devuelven nada o devuelven una sola cosa como en C o en PASCAL no?
al contrario, ronson.

mediante un procedimiento almacenado puedes construir conjuntos de datos que a veces seria complicado de hacer con una sentencia SQL.

creas un procedimiento almacenado que devuelve un monton de registros y mediante una consulta podemos hacer 'select campo1, campo2.. from procedimiento',
igual que si fuera una tabla.

lo acaba de explicar kinobi antes. lee bien.
__________________
“Plantad la semilla de la avaricia en la infértil tierra de la estupidez y obtendreis la bella flor de la mierda”
(Confucio)
Responder Con Cita
  #6  
Antiguo 19-02-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por ronson
Osea que por lo que he leido yo no puedo hacer un select y que este me devuleva una coleccion de registros, es mas los procedimientos o no devuelven nada o devuelven una sola cosa como en C o en PASCAL no?
Sí y no.

Sí porque un procedimiento sólo devuelve tipos "simples", es decir, que no puede devolver (en el returns) un conjunto de datos (una serie de tuplas), pero con la construcción FOR SELECT ... consigues que aparezcan todas las filas (tantas como ciclos tenga el bucle) en tu aplicación cliente: si haces una SELECT * FROM procedimiento (parámetros_entrada) ... obtendrás todas las tuplas.

¿No sé si me he explicado?

Saludos.

P.D. Por cierto, ¿tienes la documentación de InterBase?

Última edición por kinobi fecha: 19-02-2004 a las 10:21:22.
Responder Con Cita
  #7  
Antiguo 19-02-2004
ronson ronson is offline
Miembro
 
Registrado: feb 2004
Posts: 100
Poder: 21
ronson Va por buen camino
ahora si que te has explicado kinobi, ahora si, tengo la documentacion firebird en ingles pero no viene como llamar desde delphi a los procedimientos almacenados, pero tu ahora me acabas de aclarar, osea que si hago un SELECT * from procediemiento(para1,para2,..,paran) me devuelve todo el conjunto de tuplas a mi aplicacion, pero claro, veo que el tema es un poco rebundante, vamos a ver:

imaginemos que yo quiero que me aparezcan todos los hombrecicos de la tabla clientes que se llaman jose o que contienen la palabra jose, para posteiormente elegir uno, si yo haglo un procedimienot que me devuelva todas tuplas de la tabla que cumplan esa condicion para despues hacer un select de ese procedimiento... lo vo un poco rebunfdante, seria mas facil hacerme un query con un select y aqui santas pascuas.

que creeis?.


P.D. existe docuemtnacion interbase o firebird en español¿
Responder Con Cita
  #8  
Antiguo 19-02-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por ronson
lo vo un poco rebunfdante, seria mas facil hacerme un query con un select y aqui santas pascuas.
Bueno, todo depende de las necesidades, pero sí, utilizar procedimientos para filtrar una tabla (o una join sobre varias tablas) no es el procedimiento habitual ni el recomendado, para eso tienes la cláusula WHERE.

Cita:
Empezado por ronson
P.D. existe docuemtnacion interbase o firebird en español¿
documentación "oficial" no, y tampoco "no-oficial" que recoja todos los aspectos que se tocan en la documentación de Borland.

Una de las referencias principales (en español), además de estos foros , es la web de Alfonso Ricaño: http://www.firebird.com.mx/

Saludos.
Responder Con Cita
  #9  
Antiguo 19-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Como se ha comentado alguna vez, el hecho de que Firebird sea Open-source no quiere decir gratuito. Existe una documentación oficial de Firebird, que se puede comprar con el CD para desarrolladores de IBPhoenix.

http://www.ibphoenix.com/main.nfs?a=...50&page=ibp_cd

Como documentación gratuita, lo usualmente recomendado es la documentación beta de Interbase 6 ampliado con las Release Notes de Firebird 1.03 y Firebird 1.5.

http://www.ibphoenix.com/downloads/60All.zip
http://prdownloads.sourceforge.net/f...leaseNotes.pdf
http://www.ibphoenix.com/downloads/F...tesSpanish.pdf

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #10  
Antiguo 19-02-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Cita:
Empezado por guillotmarc
Como se ha comentado alguna vez, el hecho de que Firebird sea Open-source no quiere decir gratuito.
De hecho, existe mucho software (abierto y/o libre) que tiene documentación bajo otro tipo de licencias, en muchos casos cerradas.

De todas formas, creo que ronson se refería a documentación en español. Aun así, buen apunte el resumir los enlaces principales a la documentación. Por cierto, creo que Borland hace tiempo que "cerró" el acceso a la documentación beta de IB 6.0 (al menos no está en el lugar que estaba habitualmente).

Saludos.
Responder Con Cita
  #11  
Antiguo 19-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por kinobi
Por cierto, creo que Borland hace tiempo que "cerró" el acceso a la documentación beta de IB 6.0 (al menos no está en el lugar que estaba habitualmente).
En efecto, creo que inicialmente IBPhoenix proporcionaba un enlace para descargar esa documentación directamente de la web de Borland, el enlace que proporcionan ahora descarga la documentación de su propia web.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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


La franja horaria es GMT +2. Ahora son las 18:24:09.


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