иногда падает процедура, FB2.5.25784.
Добавлено: 23 ноя 2009, 16:01
Иногда падает процедура, с сообщением: Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test Line:37, col:4. Данные в таблицах одни и те же. Если надо пришлю скрипт создания тестовой БД.
Код: Выделить всё
CREATE OR ALTER PROCEDURE TEST (
param NUMERIC(10,0))
RETURNS (
o_result INTEGER)
AS
DECLARE VARIABLE max_obl INTEGER = 0;
DECLARE VARIABLE q_user INTEGER = 0;
DECLARE VARIABLE is_need_blob INTEGER;
DECLARE VARIABLE offc_new INTEGER;
DECLARE VARIABLE group_id INTEGER;
BEGIN
SELECT UserNew
FROM Users
WHERE ID = :param
INTO :q_user;
SELECT COALESCE(MAX(Obl), 0)
FROM TypesBlob AS ts
WHERE ts.MemberType = :q_user
AND ((ts.Offc <> 0 AND ts.MemberID = 0)
OR(ts.Offc = 0 AND EXISTS(SELECT 1
FROM Members AS g
WHERE g.GroupID = ts.MemberID)))
INTO :max_obl;
IF (max_obl = 0) THEN
BEGIN
o_result = 0;
SUSPEND;
EXIT;
END
is_need_blob = 0;
FOR SELECT t.Offc, t.MemberID
FROM TypesBlob AS t
WHERE t.MemberType = :q_user
AND (t.Offc <> 0 OR(EXISTS(SELECT g.Member
FROM Members AS g
WHERE g.GroupID = t.MemberID)))
ORDER BY Offc ASC
INTO :offc_new, :group_id
DO
BEGIN
IF (NOT EXISTS(SELECT s.Offc
FROM ListBlobs AS s
WHERE s.id = :param
AND((s.Offc = :offc_new)
OR(s.Offc = ANY(SELECT g.Member
FROM Members AS g
WHERE g.GroupID = :group_id))))) THEN - РУГАЕТСЯ ВОТ НА ЭТО
BEGIN
is_need_blob = 1;
END
END
IF (is_need_blob = 0) THEN
BEGIN
o_result = 1;
SUSPEND;
EXIT;
END
ELSE
BEGIN
o_result = -178;
SUSPEND;
EXIT;
END
END^