Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2012
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 23
RONPABLO Va por buen camino
Ya habrán pasado unos 4 o 5 años que use MS SQL server y me fue muy útil retornar varios cursores, el XML debó decir que nunca lo use, y la conexión con bases de datos del mismo o de distinto servidor era algo que probé mucho porque me gustaba, aun así no lo hice porque tuviera la necesidad, me gustaba mucho hacer un

Código SQL [-]
select campo1, campo2 from tabla

Sin necesitar que definir que campo1 era un entero y que campo2 era un varchar, aun así más de una ocación me hizo mucha falta el manejo que se da con el suspend de firebird que en MS SQL Server no se como se hace (las respuestas que recibí en el momento es que no tenía algo similar), para mis necesidades de procedimientos almacenados me parece más grabe que falte el supend que el poder retornar múltiples datasets, ya que con el mismo suspend puedo retornar datos mejor filtrados, no dudo que para otras necesidades sea mejor el tener múltiples cursores.

Respecto a lo gratis o lo de pago, pues todo depende, el hecho de descargar y usar Firebird ya se le está apoyando, y esto le produce ganancias, ahora pasar por caja no está de más, además de poner en el acerca de un "power by Firebird x.x" no está nada mal
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #2  
Antiguo 13-11-2012
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
select campo1, campo2 from tabla


Sin necesitar que definir que campo1 era un entero y que campo2 era un varchar, aun así más de una ocación me hizo mucha falta el manejo que se da con el suspend de firebird que en MS SQL Server no se como se hace (las respuestas que recibí en el momento es que no tenía algo similar), para mis necesidades de procedimientos almacenados me parece más grabe que falte el supend que el poder retornar múltiples datasets, ya que con el mismo suspend puedo retornar datos mejor filtrados, no dudo que para otras necesidades sea mejor el tener múltiples cursores.

Respecto a lo gratis o lo de pago, pues todo depende, el hecho de descargar y usar Firebird ya se le está apoyando, y esto le produce ganancias, ahora pasar por caja no está de más, además de poner en el acerca de un "power by Firebird x.x" no está nada mal
Saludos amigo, qué es esa característica de suspend en firebird?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 13-11-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 20
mightydragonlor Va por buen camino
Dentro de un procedimiento almacenado e incluso en un EXECUTE BLOCK puedes tener varios SELECT, pero el select que retorna los datos es el que tiene el SUSPEND, creo que lo mismo aplica en variables de salida, que a la final es lo mismo.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #4  
Antiguo 13-11-2012
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Cita:
Empezado por mightydragonlor Ver Mensaje
Dentro de un procedimiento almacenado e incluso en un EXECUTE BLOCK puedes tener varios SELECT, pero el select que retorna los datos es el que tiene el SUSPEND, creo que lo mismo aplica en variables de salida, que a la final es lo mismo.

Saludos.

Entonces entiendo que el suspend identifica de manera explicita que select quieres devolver... lo cual no debería ser necesario peus el mismo lenguaje PLSQL o TSQL establece la manera en que un sp retorna un recordset...

supongo que debe tener algún uso adicional en firebird... o es solo ese? identificar que selecte se devolvera?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 13-11-2012
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 23
RONPABLO Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
Entonces entiendo que el suspend identifica de manera explicita que select quieres devolver... lo cual no debería ser necesario peus el mismo lenguaje PLSQL o TSQL establece la manera en que un sp retorna un recordset...

supongo que debe tener algún uso adicional en firebird... o es solo ese? identificar que selecte se devolvera?
El suspend se usa para procedimientos almacenados que retornan un Dataset con varias columnas y varios registros, como tal es la orden de mandar la información en el momento que usted quiera, así pues uno hace el
Código SQL [-]
select campo1, campo2 from  tabla
Y no por eso se va a retornar los datos de campo1 y campo2 como resultados de un cursor, en Firebird tengo que declarar que parametros van a salir en el cursor e ir por medio de un comando llamado "for select" recorriendo el dataset que necesito consultar, ahora yo con la información que me retorna Campo1, Campo2 en el "for select " no necesariamente es la que quiero mostrar, con ella por ejemplo necesito hacer varias operaciones antes de mostrarla y al final puedo entregar un recordSet construido con información muy diferente a la que viene en la consulta original y es ahí cuando tengo el resultado que igual en una o varias variables de resultado y doy la orden de suspend y me sale un recordset con campo3 y campo4 que eran los resultados obtenidos por campo1 y campo2,

también puedo fabricar un recordset de algo que no es una tabla, ejemplo

Código SQL [-]
SET TERM ^^ ;
CREATE PROCEDURE SP_CADENA_A_RECORD (
  AINPUT VarChar(8192))
 returns (
  VALOR Integer)
AS
declare variable LASTPOS integer;
declare variable NEXTPOS integer;
begin
  AINPUT = :AINPUT || ',';
  LASTPOS = 1;
  NEXTPOS = position(',', :AINPUT, LASTPOS);
  while (:NEXTPOS > 1) do
  begin
    valor = cast(substring(:AINPUT from :LASTPOS for :NEXTPOS - :LASTPOS) as integer);
    LASTPOS = :NEXTPOS + 1;
    NEXTPOS = position(',', :AINPUT, LASTPOS);   
    suspend;
  end
  
end ^^
SET TERM ; ^^

Con el procedimiento almacenado anrterio envio como paramentro de entrada una seríe de números separados por comas, por decir "1,4,6,7,12,22", internamente hago una operación de cadenas y retorno como recortset los números en valor entero, y con ellos puedo hacer inner joins on validaciones tipo exists que me funcionan más rápido que validaciones "where campo in ('1,4,6,7,12,22').


la verdad siento que no soy muy claro al tratar de explicarme, pero eso es una idea de lo que hace el suspend
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #6  
Antiguo 13-11-2012
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 25
poliburro Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
El suspend se usa para procedimientos almacenados que retornan un Dataset con varias columnas y varios registros, como tal es la orden de mandar la información en el momento que usted quiera, así pues uno hace el

Código SQL [-]select campo1, campo2 from tabla


Y no por eso se va a retornar los datos de campo1 y campo2 como resultados de un cursor, en Firebird tengo que declarar que parametros van a salir en el cursor e ir por medio de un comando llamado "for select"

Pero eso no es agregar código adicional? Mysql y MsSql por ejemplo tu haces un

Código SQL [-]
 
   Select Campo1,Campo2,..,CampoN
     from tabla 
    where  criterio = ValParam1 or
              criterio = valParam2

y eso obtienes al ejecutr el SP con lo que no requieres de un suspend o fetch etc...

En oracle y Db2 al contrario debes delcarar como un cursor el recordset que deseas dar como salida del SP pero al final con un mero Open CurName obtienes la salida del sp...

Entonces.. déjame ver si entiendo bien, En Firebird debes hacer todo ese código para poder dar salida a un simple resultset en un SP?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 13-11-2012
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 22
cointec Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
Pero eso no es agregar código adicional? Mysql y MsSql por ejemplo tu haces un

Código SQL [-]
 
   Select Campo1,Campo2,..,CampoN
     from tabla 
    where  criterio = ValParam1 or
              criterio = valParam2

y eso obtienes al ejecutr el SP con lo que no requieres de un suspend o fetch etc...

En oracle y Db2 al contrario debes delcarar como un cursor el recordset que deseas dar como salida del SP pero al final con un mero Open CurName obtienes la salida del sp...

Entonces.. déjame ver si entiendo bien, En Firebird debes hacer todo ese código para poder dar salida a un simple resultset en un SP?
Hola, creo que uno de las mayores virtudes que creo no tienen otros motores es que se puede tratar un procedimiento almacenado como una tabla virtual y trabajar con ellos conforme si lo fuesen. El ejemplo que se ha puesto es muy simple y habría que ver como se hace un proceso complejo en otros motores para poder valorar si se necesita o no más código.

No es lo mismo devolver un cursor, que el propio procedimiento sea un cursor.

Select *
From procedimiento( aram1, aram2,..., : paramN )

Un procedimiento no se realiza para sustituir un simple select como en el caso que has puesto, su objetivo es realizar un procesamiento más o menos complejo, donde pueden intervenir consultas de varias tablas y operaciones más o menos complejas con los datos obtenidos de ellas, por ejemplo. Una de sus funciones es no es sustituir un simple select. Y el resultado de todo ello es un conjunto de registros que puedes tratar como una tabla.

Quizá podrías mostrar como devolver un recordset con características similares en sqlserver, mysql u oracle para poder comparar realmente si es más o menos complejo, porque no creo que se pueda comparar el select que has puesto como ejemplo con el procedimiento almacenado que se ha escrito.
__________________
Un saludo, Jesus García
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ayuda: "Record not found or changed by another user" alquimista_gdl Conexión con bases de datos 14 21-03-2009 20:09:21
Cursor "intermitente" al realizar consultas. mlara Firebird e Interbase 1 24-05-2008 02:51:26
Error Invalid blob handle in record buffer??? sin usar "Blobs to cache" varuhs Conexión con bases de datos 4 22-01-2007 21:19:53
¿Como Guardar un "RECORD" en un campo BLOB? sitrico Conexión con bases de datos 5 29-06-2004 17:32:01
"no current record for fetch operation" con procedimiento almacenado usado en Select Al González Firebird e Interbase 1 17-03-2004 21:13:17


La franja horaria es GMT +2. Ahora son las 05:22:04.


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