Dimitry Sibiryakov писал(а):
По п.1: научись читать синтаксические диаграммы в Lanuage Reference и будет тебе счастье.
Я читал настолько что из 200 процедур проблемы возникли только в процедурах с использованием UNION.
Я умею читать. Чтобы не быть голословным приведу реальную процедуру.
Код: Выделить всё
CREATE PROCEDURE yaf_user_accessmasks(
i_BoardID INTEGER,
i_UserID INTEGER)
RETURNS
(
"AccessMaskID" integer,
"AccessMaskName" varchar(50),
"ForumID" integer,
"ForumName" varchar(128),
"CategoryID" integer,
"ParentID" integer
)
AS
BEGIN
FOR SELECT
x.*
FROM (SELECT e."AccessMaskID" AS "AccessMaskID",
e."Name" AS "AccessMaskName",
f."ForumID" AS "ForumID",
f."Name" AS "ForumName",
f."CategoryID",
f."ParentID"
FROM yaf_User a
JOIN yaf_UserGroup b
ON b."UserID" = a."UserID"
JOIN yaf_Group c
ON c."GroupID" = b."GroupID"
JOIN yaf_ForumAccess d
ON d."GroupID" = c."GroupID"
JOIN yaf_AccessMask e
ON e."AccessMaskID" = d."AccessMaskID"
JOIN yaf_Forum f
ON f."ForumID" = d."ForumID"
WHERE a."UserID" = :i_UserID
AND c."BoardID" = :i_BoardID
GROUP BY e."AccessMaskID",e."Name",f."ForumID",f."Name"
UNION
SELECT c."AccessMaskID" AS "AccessMaskID",
c."Name" AS "AccessMaskName",
d."ForumID" AS "ForumID",
d."Name" AS "ForumName",
d."CategoryID",
d."ParentID"
FROM yaf_User a
JOIN yaf_UserForum b
ON b."UserID" = a."UserID"
JOIN yaf_AccessMask c
ON c."AccessMaskID" = b."AccessMaskID"
JOIN yaf_Forum d
ON d."ForumID" = b."ForumID"
WHERE a."UserID" = :i_UserID
AND c."BoardID" = :i_BoardID
GROUP BY c."AccessMaskID",c."Name",d."ForumID",d."Name") AS x
ORDER BY x."ForumName",
x."AccessMaskName",x."AccessMaskID",x."ForumID",x."CategoryID",
x."ParentID"
INTO
:"AccessMaskID",
:"AccessMaskName",
:"ForumID",
:"ForumName",
:"CategoryID",
:"ParentID"
DO SUSPEND;
END )
Message: isc_dsql_prepare failed
SQL Message : -104
Invalid token
Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Dimitry Sibiryakov писал(а):
ЗЫ: чтобы не быть голословным:
Вопрос снят - как раз это работает. Запускал через провайдер, а не напрямую, и база висла по другой причине. То есть это ошибка другого софта.