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 03-01-2005
granchop granchop is offline
Registrado
 
Registrado: ene 2005
Posts: 3
Poder: 0
granchop Va por buen camino
Procedimiento Almacenado Devolver una Select

Hola me gustaria saber si es posible mostrar un conjunto de resultados desde un prodedimiento almacenado en firebird o Interbase de la misma forma que lo hace sql Server.

Ejemplo Sql server:

Create Procedure Prueba ( @p1 smallint)
as

select * from T1 where c1 = @p1

Esto me devolveria todos los campos de T1 donde c1 sea igual a la variable
pero en Interbase o Firebird no se como se podria hacer

Grancias
Responder Con Cita
  #2  
Antiguo 04-01-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Procedimiento almacenado en Firebird/Interbase

Hola granchop!

Aquí tienes un ejemplo de un procedimiento almacenado en FireBird que se comporta como un SELECT

Código SQL [-]
SET TERM !!;

CREATE PROCEDURE prueba( p1 SMALLINT)
RETURNS (
    campo1 SMALLINT,/*En la cláusula RETURNS se especifican las columnas que devolverá la consulta*/
    campo2 NUMERIC(15,2),
    .
    .
    .
    campoN VARCHAR(15))
AS
BEGIN
    FOR SELECT /*La cláusula FOR SELECT permite que el procedimiento se comporte como un SELECT*/
      c1,
      c2,
      .
      .
      .
      cN
    FROM T1
    WHERE c1=1
    INTO /*Coloca los resultados obtenidos con SELECT dentro de las variables declaradas con RETURNS */
      :campo1,
      :campo2,
      .
      .
      .
      :campoN
    DO
        SUSPEND;/*Detiene la ejecución del procedimiento para mostrar el resultado parcial*/
END!!

SET TERM ;!!

Después solamente hay que llamar al procedimiento de la siguiente manera:

Código SQL [-]
  SELECT * FROM prueba(10)

Espero que te sea útil

Última edición por Héctor Randolph fecha: 04-01-2005 a las 08:20:22.
Responder Con Cita
  #3  
Antiguo 04-01-2005
granchop granchop is offline
Registrado
 
Registrado: ene 2005
Posts: 3
Poder: 0
granchop Va por buen camino
Gracias lo probe y me resulto es un poco mas incomodo puesto que tienes que declarar todos los datos que vas a devolver. Aprovecho para realizar otra preguntita ya que estoy iniciandome en Firebird e Interbase cuando hago la llamada al procedimiento almacenado se puede utilizar
SELECT * FROM PROCEDIMIENTO(Valor1,Valor2) o
EXCUTE PROCEDURE PROCEDIMIENTO(Valor1,Valor2)
mi cuestion es que cando trabajo con dos variables llamese Var1 y Var2 hasta donde e podido averiguar hay que seguir el orden de como las declaraste no como en Sql Server que puedo hacer lo siguiente
EXEC PROCEDIMIENTO @Variable2 = Valor2,@Variable1 = Valor1
es decir como puedo especificar a que variable doy el valor no tengo que seguir el orden y me resulta mucho mas comodo y hay va la pregunta.
¿es posible en Intebase o Firebird hacer esto?

Gracias por la colaboracion con este pobre Novato
Responder Con Cita
  #4  
Antiguo 04-01-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Cita:
Empezado por granchop
es un poco mas incomodo puesto que tienes que declarar todos los datos que vas a devolver.
Hola granchop!

Tienes razón es un poco más latoso, pero la ventaja de esta estructura es que te ofrece más posibilidades ya que tienes más control sobre los datos que devuelves, por ejemplo puedes declarar variables, después moficarlas dentro del procedimiento y devolverlas como una nueva columna en la consulta, mezclar datos procedentes de otras tablas, calcular valores en funciones definidas por el usuario en librerías externas, entre otras cosas.

Cita:
Empezado por granchop
cuando hago la llamada al procedimiento almacenado se puede utilizar
SELECT * FROM PROCEDIMIENTO(Valor1,Valor2) o
EXCUTE PROCEDURE PROCEDIMIENTO(Valor1,Valor2)
Si utilizas EXCUTE PROCEDURE PROCEDIMIENTO(Valor1,Valor2) entonces el procedimiento no devolverá toda la consulta, es decir, al encontrar la cláusula SUSPEND entonces se da por terminado y solamente mostrará el primer renglón.

Llamar a un procedimiento por medio de EXECUTE solamente se utiliza cuando el procedimiento devuelve un valor o ninguno y en este caso no es necesario utilizar SUSPEND ni la cláusula FOR SELECT.

Cita:
Empezado por granchop
mi cuestion es que cando trabajo con dos variables llamese Var1 y Var2 hasta donde e podido averiguar hay que seguir el orden de como las declaraste no como en Sql Server que puedo hacer lo siguiente
EXEC PROCEDIMIENTO @Variable2 = Valor2,@Variable1 = Valor1
es decir como puedo especificar a que variable doy el valor no tengo que seguir el orden y me resulta mucho mas comodo y hay va la pregunta.
¿es posible en Intebase o Firebird hacer esto?
Bueno, hasta el momento yo siempre he enviado los parámetros siguiendo el orden en el que fueron declarados en el procedimiento, me parece que FireBird no tiene la flexibilidad que tu comentas.

Un saludo.

Última edición por Héctor Randolph fecha: 04-01-2005 a las 09:59:26.
Responder Con Cita
  #5  
Antiguo 04-01-2005
granchop granchop is offline
Registrado
 
Registrado: ene 2005
Posts: 3
Poder: 0
granchop Va por buen camino
Gracias Duda aclarada por lo que he trabajado con Sql Server me parace mas completo porque a lo que me comentabas en Sql puedo hacer

SET @VARIABLE = @VARIABLE + 1
SELECT @VARIABLE NOMBRE_CAMPO FROM T1

y trabajar con esa variable, las desventajas que le encuentro a Sql Server son su alto coste en la Version Comericial, junto con las restricciones de la version libre(MSDE) y claro esta que Sql Server no es multiplataforma.

En fin creo que me quedo con Firebird para aplicaciones mas o menos MEDIAS en cuanto a carga de Datos. Pero me sigue gustando mas SQL Server a ver si en proximas versiones de Firebir e Interbase se van arreglando estos problemillas.

Gracias por toda la ayuda prestada
Responder Con Cita
  #6  
Antiguo 14-09-2006
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Question

Hola que tal.
Código SQL [-]
CREATE PROCEDURE prueba( p1 SMALLINT)
RETURNS (
    campo1 SMALLINT,/*En la cláusula RETURNS se especifican las columnas que devolverá la consulta*/
    campo2 NUMERIC(15,2),
    .
    .
    .
    campoN VARCHAR(15))
Como se espesifica, declarar las columnas con su tipo de dato, ahora se puede ese tipo de dato poner un dominio?

ya que hice una prueba pero por tipo de dato le puse un dominio que deve ser lo mismo no?

o ahi algo diferente en la declaracion?

saludos

gracias
__________________
OpenSuse OpenOffice.org icomputo
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 04:47:15.


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