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.