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 10-02-2004
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
FireBird 1.5 RC8 y nuevas funcionalidades???

Hola,
Leyendo las nuevas funcionalidades de FB1.5 RC8, he intentado hacer unas pruebas pero nome funciona o al aprecer no lo he entendido.
En los ejemplos que colocan, se dice que se permite ejecutar una sentencia mediante una cadena. Es decir en un procedimiento almancenado o un trigger se puede ejecutar un "EXECUTE STATEMENT" y una cadena sql, pero al intentar hacerlo no lo hace, me da errores.
En el documento de la release traducido al español, dice:
Cita:
(1.5) EXECUTE STATEMENT
Alex Peshkov
Extensión PSQL que admite una cadena de caracteres la cual es una consulta DSQL (dynamic SQL) y la
ejecuta como si hubiera sido enviada a DSQL.
Disponible en triggers y procedimientos almacenados.
La sintaxis puede tener tres variantes.
Sintaxis 1
Ejecuta <cadena> como una operación SQL que no devuelve ningún registro, es decir INSERT, UPDATE,
DELETE, EXECUTE PROCEDURE o cualquier sentencia DDL excepto CREATE/DROP DATABASE.

EXECUTE STATEMENT <cadena>;

Ejemplo
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);
DECLARE VARIABLE Par INT;
BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;
Sql = ’EXECUTE PROCEDURE ’ || Pname || ’(’;
Sql = Sql || CAST(Par AS VARCHAR(20)) || ’)’;
EXECUTE STATEMENT Sql;
END
Osea que puedo ejecutar "cualquier" tipo de sentencia excepto crear o eliminar bases de datos.
Lo que intento hacer es:
Cita:
CREATE PROCEDURE GENERAR(GENERADOR VARCHAR(40))
RETURNS(IDVALOR INTEGER)
AS
BEGIN
EXECUTE STATEMENT 'GEN_ID(' || GENERADOR || ',1)' || INTO :IDVAL;
END;
En teoría esto debe funcionar, si hay algo herrado, por favor indicarmelo y si es un fallo o un bug que lo dudo también.
El error que da haciendo la prueba en IBExpert personal es que el token GEN_ID no existe.
El procedure lo permite crear sin problemas, pero la ejecución no da buenos resultados.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 10-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 mosorio
El procedure lo permite crear sin problemas, pero la ejecución no da buenos resultados.
es lo esperado, ya que el parser espera una cadena y puedes pasarle lo que quieras (siempre que sea una cadena). Otro asunto es lo que ocurrirá en tiempo de ejecución.

Aunque no puedo probarlo ahora, yo probaría con esto:

Código:
CREATE PROCEDURE GENERAR(GENERADOR VARCHAR(40))
RETURNS(IDVALOR INTEGER)
AS BEGIN
  EXECUTE STATEMENT 'IDVALOR = GEN_ID(' || GENERADOR || ',1)';
END;
Saludos.
Responder Con Cita
  #3  
Antiguo 11-02-2004
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Hola Kinobi
Lamento informarte que la opción que has dado no funciona.
En la parte más abajo del documento dice que primero se debe armar la sentencia y luego ejecutar la cadena; pero igüalmente da el mismo resultado, siempre da error.

Si llegas a realizar las pruebas dime si te ha resultado, seguiré intentandolo haber cual sale.
Responder Con Cita
  #4  
Antiguo 11-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.

Tal como lo veo, tienes que utilizar la Sintaxis 2, puesto que el comando ejecutado devuelve un valor.

execute statement 'select gen_id(' || GENERADOR || ',1) from rdb$database' into :IDVALOR;

Nota: Lo acabo de probar, y solo hay que tener en cuenta que IDVALOR debe ser un BIGINT y no un INTEGER.

Saludos
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 11-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
Por cierto, esta es la ultima revisión de las Release Notes en castellano :

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
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 08:54:33.


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