Преамбула описана в http://forum.ibase.ru/phpBB2/viewtopic.php?t=2931.
Хранимая процедура GET_GROUP должна возвратить параметры группы пользователей (с этим проблем нет, код тривиальный, указывать не буду), а так же временную таблицу нижеуказанной структуры:
ID BIGINT,
FLAG_SYSTEM BOOLEAN,
FLAG_ACTIVE BOOLEAN,
NAME D_TITLE,
LOGIN D_TITLE,
FLAG BOOLEAN
Примечание1: BOOLEAN - Домен
Примесание2: D_TITLE - Домен VARCHAR(50) CHARACTER SET NONE
Эта таблица содержит список всех пользователей системы, и у тех пользователей, которые входят в запрашиваемую группу поле FLAG должно содержать 1.
Объясню для чего это.
Отступление1: разработка ведется в BDS 2006, используются компоненты FIBPlus, EhLib.
Форма редактирования группы содержит вкладку "Пользователи", на которой есть DBGridEh. Этот грид используется для отображения вышеуказанной временной таблицы для удобства определения списка пользователей, входящих в группу (Т.е. пользователь просто щелкает по чекбоку "FLAG").
Для определения признака вхождения пользователя в группу используется ХП USER_IN_GROUP:
Код: Выделить всё
CREATE PROCEDURE USER_IN_GROUP(
GROUP_ID BIGINT,
USER_ID BIGINT)
RETURNS(
FLAG SMALLINT)
AS
BEGIN
SELECT
COUNT(*)
FROM
USERS_GROUPS UG
WHERE
(UG.USER_ID = :USER_ID) AND
(UG.GROUP_ID = :GROUP_ID)
INTO
:FLAG;
SUSPEND;
END
Код: Выделить всё
QUERY = 'CREATE TABLE ' || TABLE_NAME || '(ID BIGINT, FLAG_SYSTEM BOOLEAN, FLAG_ACTIVE BOOLEAN, NAME D_TITLE, LOGIN D_TITLE, FLAG BOOLEAN)';
EXECUTE STATEMENT QUERY;
FOR SELECT
ID
FROM
USERS
INTO
:USER_ID
DO
BEGIN
USER_ID_STR = CAST(USER_ID AS VARCHAR(10));
QUERY = 'INSERT INTO ' || TABLE_NAME || '(ID, FLAG_SYSTEM, FLAG_ACTIVE, NAME, LOGIN, FLAG) SELECT ID, FLAG_SYSTEM, FLAG_ACTIVE, NAME, LOGIN, USERINGROUP.FLAG FLAG FROM USERS, USER_IN_GROUP(' || USER_ID_STR || ', ' || GROUP_ID_STR || ') USERINGROUP WHERE ID = ' || USER_ID_STR;
EXECUTE STATEMENT QUERY;
END
Загвоздка вот в чем:
По отдельности код работает (проверяю в менеджере), т.е. если я отдельно создаю таблицу, а затем помещаю данные.
А в самой процедуре возникает ошибка в момент занесения данных: таблица TABLE_NAME Не существует.
Коментарю код занесения данных, запускаю процедуру, таблица создается.
Запускаю некоментаренную процедуру - возникает вышеуказанная ошибка.
Получается, что на момент занесения данных процедура не видит таблицы? Или что? Я что-то совсем запутался.
Люди добрые укажите в каком направлении рыть?
Спасибо заранее