FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
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 |
#2
|
||||
|
||||
Cita:
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
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" |
#3
|
||||
|
||||
Cita:
Pero eso no es agregar código adicional? Mysql y MsSql por ejemplo tu haces un
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 |
#4
|
|||
|
|||
Cita:
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 |
#5
|
||||
|
||||
Cita:
Claro, un SP contiene dentro de si mucho código PLSQL, pero en el caso que se trata es meramente sobre como devolver un resulset. y si, aunque parezca muy simple, realmente en otros motores de bases de datos devolverlos es muy sencillo... no necesitas tanto trabajo para devolver un simple resultset. esto
Es exactamente lo mismo que cualquiera de estos:
Te devuelven todos un resulset
__________________
Conoce mi blog http://www.edgartec.com |
#6
|
||||
|
||||
Cita:
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#7
|
||||
|
||||
En Sql Server es muy común ver procedimientos con una simple consulta ya que mejoran la velocidad de la consulta (tengo entendido), así pues es más rápido consultar información de una tabla por medio de un procedimiento almacenado que por una consulta directa en un componente similar al TQuery, en firebird por el contrario esto no cambia mucho y no se acostumbra a tener un procedimientos para insertar, otro para modificar y otro para consultar (no por lo menos para hacer estos procesos más rápidos), con firebird se construyen un Dataset muy fácilmente sin la necesidad de consultar una tabla como es el caso del ejemplo que envié en el procedimiento llamado SP_CADENA_A_RECORD, ese procedimiento no consulta sobre ninguna tabla, solo va procesando una cadena y va retornando un DataSet, lo consulto en un IBQuery haciendo un: Por ejemplo le puedo hacer un join con una tabla
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#8
|
||||
|
||||
Cita:
Sobre el rendimiento de la consulta en un SP, esto aplica para la gran mayoria de motores de bases que cuentan con algo llamado "Execution plan" Acaso firebid no lo tiene? Cómo hace firebird para decidir la ruta más óptima para ejecutar una sentencia sql? Cómo hacen ustedes para verificar en Firebrid que no están ejecutando un "Table Scan" al ejecutar una consulta? ¿Firebird es capaz de permitirles decidir como y cuándo usar determinados índices en una tabla? Cita:
__________________
Conoce mi blog http://www.edgartec.com Última edición por poliburro fecha: 14-11-2012 a las 00:38:44. |
#9
|
||||
|
||||
Amigo Poliburro, ¡¡¡qué manera de desvariar!!!, lo tuyo con firebird es grave
|
#10
|
||||||
|
||||||
Cita:
Cita:
Cita:
Cita:
Cita:
el resultado va ser un DataSet: Cita:
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
|
|
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 |
|