为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
BEGIN
FOR rec IN (
SELECT
'SP_CLOSE_SESSION(' || SESS_ID || ');' AS close_session
FROM (
SELECT
sess_id
FROM SYS."V$SESSIONS"
WHERE
user_name != 'SYSDBA'
AND SQL_TEXT LIKE '%select PDATE,jyqx from(%'
)
) LOOP
-- 动态执行存储过程
EXECUTE IMMEDIATE rec.close_session;
-- 可选:添加执行间隔(如每关闭一个会话等待1秒)
-- DBMS_LOCK.SLEEP(1);
END LOOP;
COMMIT; -- 确保所有操作提交
END;
/
如何循环执行?每秒一次。比如类似python里的while true,time sleep 1.这样实现?
--创建存储过程
CREATE OR REPLACE PROCEDURE AUTO_CLOSE_SESSION()
AS
BEGIN
-- 无限循环
WHILE 1 = 1 LOOP
BEGIN
-- 动态关闭会话的逻辑
FOR rec IN (
SELECT
'SP_CLOSE_SESSION(' || SESS_ID || ');' AS close_session
FROM (
SELECT
sess_id
FROM SYS."V$SESSIONS"
WHERE
user_name != 'SYSDBA'
-- AND SQL_TEXT LIKE '%select PDATE,jyqx from(%'
)
)
LOOP
EXECUTE IMMEDIATE rec.close_session; -- 执行关闭
END LOOP;
COMMIT; -- 提交事务
DBMS_LOCK.SLEEP(1); -- 休眠1秒(达梦可能需调整参数)
END;
END LOOP;
END;
/
-- 手动调用存储过程
CALL AUTO_CLOSE_SESSION();
该存储过程会一直运行,需通过达梦管理工具(如 DM Management Studio)手动终止其所在会话。
https://eco.dameng.com/document/dm/zh-cn/pm/job#4.2%20%E9%80%9A%E8%BF%87%E5%9B%BE%E5%BD%A2%E5%8C%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%AE%9E%E7%8E%B0
使用定时作业调度试试