Help новичку! Вопрос по функциям в IB/Firebird
Модератор: kdv
Help новичку! Вопрос по функциям в IB/Firebird
Здравствуйте все. Помогите разобраться в следующем вопросе.
Есть таблица видов расчетов, где указана формула расчета типа:
formula = n1+n5+lastval(n10), где lastval - функция, которая находит значение n10 за прошлый месяц. Можно ли средствами IB/Firebird реализовать следующий запрос:
UPDATE <TABLENAME> SET n25 = <FORMULA> ?
Как заставить сервер распозанать lastval() (к примеру в Sybase есть возможность писать собственные internal функции) ? Может есть возможность использования процедуры ?
Помогите, пожалуйста, раобраться с ситуацией.
Спасибо.
Есть таблица видов расчетов, где указана формула расчета типа:
formula = n1+n5+lastval(n10), где lastval - функция, которая находит значение n10 за прошлый месяц. Можно ли средствами IB/Firebird реализовать следующий запрос:
UPDATE <TABLENAME> SET n25 = <FORMULA> ?
Как заставить сервер распозанать lastval() (к примеру в Sybase есть возможность писать собственные internal функции) ? Может есть возможность использования процедуры ?
Помогите, пожалуйста, раобраться с ситуацией.
Спасибо.
Начал пытаться, но столкнулся с такой вещью:kdv писал(а):в IB/FB такого вида функций нет. Следовательно, нужно написать процедуру, в которой сначала надо посчитать чего там последнее, и затем присвоить это в update.
Код процедуры
Код: Выделить всё
CREATE PROCEDURE LASTVAL (
RASCHID INTEGER,
FLAG SMALLINT,
TAB INTEGER,
D_W DATE)
RETURNS (
RASCH_VAL NUMERIC(15,0))
AS
DECLARE VARIABLE SQL_TEXT VARCHAR(1024); /* SQL òåêñò, äëÿ âûïîëíåíèÿ SELECT */
DECLARE VARIABLE D_R DATE; /* Ðàñ÷åòíàÿ äàòà */
begin
RASCH_VAL = 0;
if (FLAG = 0) then /* Íå ó÷èòûâàòü äåêàáðü*/
BEGIN
if (f_month(d_w) = 1) then
BEGIN
SUSPEND;
EXIT;
END
END
D_R = F_ADDMONTH(D_W,-1);
SQL_TEXT = 'SELECT S'||CAST(:RASCHID AS VARCHAR(4))||
' FROM ZARP_ARH WHERE TAB = '||CAST(:TAB AS VARCHAR(4))||
' AND PERIOD = '''||CAST(:D_R AS VARCHAR(10))||'''';
EXECUTE STATEMENT SQL_TEXT INTO :RASCH_VAL;
suspend;
end
Variable type (position 1) in EXECUTE STATEMENT 'SELECT S100 FROM ZARP_ARH WHERE' INTO does not match returned column type.
At procedure 'LASTVAL'.
Что здесь не так ???