Cita:
Empezado por sitrico
Código SQL [-]
CREATE PROCEDURE APLICAR_FORMULA_MAGICA(IdFormula integer)
as
declare variable FORMULASQL BLOB SUBTYPE 0;-- TEXTO
begin
-- primero leer la formula SQL
FOR Select FORMULASQL FROM FORMULAS WHERE IDFORMULA = :IdFormula
Into :FORMULASQL --CAMPO MEMO
DO BEGIN
-- Aqui se podria asignar el codigo SQL almacenado en FORMULASQL
-- a "Algo" y luego ejecutar dichas sentencias para arrojar como resultado
-- el valor de la formula???
suspend;
End
end
Claro todo desde dentro de firebird (2.0.1) con procedimientos almacenados y eso, la intención es permitir al usuario ejecutar algunos cálculos especiales que arrojen resultados dentro de otras consultas.
En resumidas: ¿ Se puede almacenar y ejecutar codigo SQL dentro de campos memo en una base de datos firebird ?
|
Prueba con
EXECUTE STATEMENT
Código SQL
[-]
CREATE PROCEDURE APLICAR_FORMULA_MAGICA(IdFormula integer)
as
declare variable FORMULASQL BLOB SUBTYPE 0;-- TEXTO
-- Según el ejemplo, pero debes conocer el tipo de dato al que pertenece.
declare variable ResultadoFormula DOUBLE PRECISION;
begin
FOR Select FORMULASQL FROM FORMULAS WHERE IDFORMULA = :IdFormula
Into :FORMULASQL
DO BEGIN
EXECUTE STATEMENT :FORMULASQL
INTO :ResultadoFormula; -- si siempre devuelve 1 campo
-- Operar con ese resultado almacenado en ResultadoFormula
suspend;
End
end
Pero el problema está en qué es lo que devuelve esa FORMULA, porque solo con ejecutarla dentro del procedimiento, no creo que sirva de mucho...no se.
¿Esa FORMULA devuelve siempre 1 campo o devuelve más de 1?
¿de que tipo es el dato devuelto?
Me acabo de dar cuenta que la sentencia EXECUTE STATEMENT solo funciona con <string>,
con lo que si falla, (porque no lo he comprobado) deberias pasar de blob a string (creo).