WildSery писал(а):Это библиотека rFunc скорее всего.
А не может глюк (по крайней мере на моей локальной машине) быть связан с тем, что накануне переставлялась система? Эта библиотека, кроме как в базе, где еще может находиться? (Я начал заниматься данным проектом совсем недавно)
WildSery писал(а):Может, приведёшь наконец какую-нибудь информацию по выполняемому запросу/процедуре ?
Телепатов тут мало, все заняты

Я понимаю

. Еще временами (иногда из пользовательской программы, а иногда - при попытке запуска процедуры изнутри IBExpert'а такое сообщение: "Invalid token. invalid request BLR at offset 581. function STRLEN is not defined. module name or entrypoint could not be found".
Предположительно, ноги у глюки могут расти из этой процедуры:
===
Код: Выделить всё
CREATE PROCEDURE P_DETAILWITHBILLET (
ID INTEGER,
DT DATE)
RETURNS (
REF_DETAIL INTEGER,
REF_DATES DATE,
NAME VARCHAR(50) CHARACTER SET NONE,
DESIGNATION VARCHAR(50) CHARACTER SET NONE,
NETTO DOUBLE PRECISION,
BRUTTO DOUBLE PRECISION,
LABOUR DOUBLE PRECISION,
MATERIAL VARCHAR(50) CHARACTER SET NONE,
LEND DOUBLE PRECISION,
PARCEL INTEGER,
LEN DOUBLE PRECISION)
AS
DECLARE VARIABLE J INTEGER;
DECLARE VARIABLE Q INTEGER;
DECLARE VARIABLE D DATE;
DECLARE VARIABLE S DOUBLE PRECISION;
DECLARE VARIABLE MAT VARCHAR(150) CHARACTER SET NONE;
BEGIN
SELECT t.id, d.dates, t.name, t.designation, d.netto, d.brutto,
p.name || ' ' || s.name || ' ' || m.sizes,
d.lend, d.parcel, d.len
FROM d_detail d, detail t, material m, sortament s, type p
WHERE (d.ref_detail=:id) AND (d.dates=:dt) AND
(t.id=d.ref_detail) AND (t.ref_material=m.id) AND
(m.ref_sortament=s.id) AND (s.ref_type=p.id)
INTO :ref_detail, :ref_dates,
:name, :designation, :netto, :brutto, :mat, :lend, :parcel, :len;
if (strlen(mat) > 50)
then material = substr(mat, 1, 50);
else material = mat;
SELECT SUM(l.quantity * o.rate * k.k)
FROM l_operationd l, d_category o, equipment e, equipment_group k
WHERE (l.ref_category=o.ref_category) AND (l.ref_dates=o.dates) AND
(l.ref_detail=:ref_detail) AND (l.ref_datesd=:ref_dates) and
(l.ref_equipment = e.id) and (e.ref_group = k.id)
INTO :labour;
if (parcel is not null) then
FOR SELECT (l.quantity * o.rate * k.k) / :parcel
FROM l_prepared l, d_category o, equipment e, equipment_group k
WHERE (l.ref_detail=:ref_detail) AND (l.ref_datesd=:ref_dates) AND
(l.ref_category=o.ref_category) AND (l.ref_dates=o.dates) and
(l.ref_equipment = e.id) and (e.ref_group = k.id)
INTO :s
DO
IF (:s IS NOT NULL) THEN labour = :labour + :s;
if (labour is null) then labour = 0;
SUSPEND;
FOR SELECT b.ref_billet, d.dates
FROM billet b, d_detail d
WHERE (b.ref_detail=:id) AND (b.ref_billet=d.ref_detail) AND
(d.dates = (SELECT MAX(dates) FROM d_detail WHERE ref_detail=d.ref_detail))
INTO :j, :d
DO
FOR SELECT ref_detail, ref_dates, name, designation,
netto, brutto, material, lend, parcel, len
FROM p_DetailWithBillet( :j, :d )
INTO :ref_detail, :ref_dates, :name, :designation,
:netto, :brutto, :material, :lend, :parcel, :len
DO SUSPEND;
END
===
Сорри за большой исходник.