Informix версии 11.70 - 12.10
Попытка создать хранимую процедуру для получения идентификатора сеанса пользователя, который заблокировал таблицу, а затем выполнить встроенную функцию с использованием этого идентификатора сеанса. Я не пишу слишком много процедур в Informix.
Получение синтаксической ошибки вокруг WITH RESUME.
Любая помощь?
CREATE PROCEDURE sp_kill_lock ()
RETURNING
INT as User_Session
;
-- declaration of variables
DEFINE rsUser_Session INT;
-- SELECT each User Session that has a lock on a table
SELECT DISTINCT s.sid AS User_Session
FROM sysmaster:syslocks l, sysmaster:syssessions s
WHERE s.sid = l.owner
AND dbsname <> 'sysmaster'
ORDER BY 1
INTO TEMP tempSession;
--Cursor
FOREACH
SELECT User_Session
INTO rsUser_Session
FROM tempSession
RETURN
rsUser_Session;
--kill the session returned
EXECUTE FUNCTION sysadmin:task("onmode","z",rsUser_Session)
WITH RESUME
;
END FOREACH
END PROCEDURE;
-- Permissions for routine "sp_kill_lock"
grant execute on function sp_kill_lock to 'public';
Я изменил код, и, по крайней мере, больше не получаю синтаксическую ошибку. Теперь говорится, что функция возвращает слишком много значений:
CREATE PROCEDURE sp_kill_lock ()
RETURNING
INT as User_Session
;
-- declaration of variables
DEFINE rsUser_Session INT;
-- SELECT each User Session that has a lock on a table
SELECT DISTINCT s.sid AS User_Session
FROM sysmaster:syslocks l, sysmaster:syssessions s
WHERE s.sid = l.owner
AND dbsname <> 'sysmaster'
ORDER BY 1
INTO TEMP tempSession;
--Cursor
FOREACH
SELECT User_Session
INTO rsUser_Session
FROM tempSession
--removed this RETURN
--RETURN
--rsUser_Session;
--kill the session returned
EXECUTE FUNCTION sysadmin:admin("onmode","z",rsUser_Session);
--removed the WITH RESUME
END FOREACH
END PROCEDURE;
Для проверки заблокированной таблицы:
BEGIN WORK;
LOCK TABLE mytable IN EXCLUSIVE MODE