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-07-2003
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Cursores en DSQL

Bueno, se me ocurre ahora esta pregunta:

Si quisiera usar sursores sería necesario que lo hiciera con DSQL. Cuándo uso DSQL? En la Referencia del Lenguaje dice que DSQL permite crear sentencias en tiempo de ejecución. Cómo? Alguien podría ofrecerme algún ejemplo. He buscado en sitios pero no he encontrado.

Ahora, la última pregunta. Puedo crear un SP con DSQL?

Gracias.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #2  
Antiguo 03-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por mlara
Si quisiera usar sursores sería necesario que lo hiciera con DSQL.
No necesariamente. El SQL estático también trabaja con cursores. Es más, desde DSQL no podrás declarar cursores explícitamente.

Por si pudiese ir tu duda por este camino, cuando lanzas una setencia SELECT, por ejemplo desde una aplicación Delphi por medio de un componente TQuery (o similares), ya estás usando cursores, aunque el componente (en el caso del BDE, a través del controlador SQL-Links InterBase) encapsula y oculta toda su gestión. Al fin y al cabo, el cursor es el mecanismo que tiene el servidor para devolver (al cliente) el conjunto resultado de filas que produce la consulta, provenga ésta de una sentencia dinámica o estática.

Cita:
Posteado originalmente por mlara
Cuándo uso DSQL?
Cuando creas sentencias SQL en tiempo de ejecución, por ejemplo cuando pasas sentencias SQL al servidor a través de componentes de acceso como BDE, IBX, DBX, ..., cuando lo haces embebiendo las sentencias SQL en lenguajes anfitriones que lo permitan (necesitas un preprocesador SQL para ese lenguaje). Entiende en ambos casos que hablamos de sentencias creadas en tiempo de ejecución, que se desconocen antes de cualquier proceso de compilación.

Cita:
Posteado originalmente por mlara
En la Referencia del Lenguaje dice que DSQL permite crear sentencias en tiempo de ejecución. Cómo?
Básicamente de dos formas:

1. a través de las funciones del API dedicadas al DSQL (Documentación de InterBase 6, volumen "Api Guide", capítulo "6.- Working with Dynamic SQL"), bien llamándolas directamente, o encapsuladas en métodos de componentes (BDE, IBX, DBX, componentes de acceso que te crees tú, ...).

2. mediante SQL embebido (Documentación de InterBase 6, volumen "Embebed SQL", capítulo "13.- Using Dynamic SQL"), aunque al final el preprocesador las traducirá por las correspondientes llamadas al API y estarás en el caso 1.

Cita:
Posteado originalmente por mlara
Ahora, la última pregunta. Puedo crear un SP con DSQL?
No, el código de un procedimiento almacenado se "compila" (a un lenguaje denominado BLR) en el momento de su creación o actualización en la base de datos, por tanto, no admite la creación de sentencias al vuelo.

Saludos.

Última edición por kinobi fecha: 03-07-2003 a las 01:51:25.
Responder Con Cita
  #3  
Antiguo 03-07-2003
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
A la última pregunta has respondido:

Cita:
No, el código de un procedimiento almacenado se "compila" (a un lenguaje denominado BLR) en el momento de su creación o actualización en la base de datos, por tanto, no admite la creación de sentencias al vuelo.
Si esto es así, por qué en la referencia del lenguaje DECLARE CURSOR se expone como una sentecia no DDL sino DML que puede usarse como las otras, pero que sólo está disponible en gpre y DSQL?

Además por qué si no puedo crear mis propios cursores se expone también la sentencia FETCH también como una sentencia DML que me permite desplazarme a través del cursor?
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #4  
Antiguo 03-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

[... DSQL en procedimientos almacenados ...]

Cita:
Posteado originalmente por mlara
Si esto es así, por qué en la referencia del lenguaje DECLARE CURSOR se expone como una sentecia no DDL sino DML que puede usarse como las otras, pero que sólo está disponible en gpre y DSQL?
En la documentación que tengo yo, la de InterBase 6, indica que que "DECLARE CURSOR" puede utilizarse en SQL y DSQL, como cualquier otra sentencia DDL (CREATE TABLE, CREATE INDEX, ...). No existe impedimento para utilizar una sentencia DDL en DSQL.

Cita:
Posteado originalmente por mlara
Además por qué si no puedo crear mis propios cursores se expone también la sentencia FETCH también como una sentencia DML que me permite desplazarme a través del cursor?
Básicamente porque sí puedes crear tus propios cursores, pero no en el código de procedimientos almacendos.

En resumen, y para el caso concreto de InterBase: en el código de un procedimiento almacenado no puedes crear una sentencia dinámicamente en tiempo de ejecución. Por ello no es posible pasar como parámetro al procedimiento una sentencia SQL desde el cliente (lo comento porque es una cuestión planteada cada cierto tiempo en este foro), ni tampoco crearla en el propio procedimiento. Lo anterior también es aplicable a triggers.

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


La franja horaria es GMT +2. Ahora son las 09:33:37.


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