|
|
修改后的触发器:
CREATE OR REPLACE TRIGGER USER_LOGON
AFTER LOGON
ON DATABASE
DECLARE
V_ERROR VARCHAR2(255);
ERR_LOGON EXCEPTION;
CURSOR C_USER IS
SELECT SID,
SERIAL#,
USER#,
USERNAME,
OSUSER,
MACHINE,
TERMINAL,
PROGRAM,
LOGON_TIME
FROM V$SESSION
WHERE TYPE = 'USER' AND USERNAME <> ' ' AND
TO_CHAR(LOGON_TIME, 'YYYY-MM-DD HH24:MI:SS') <
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI') || ':' ||
(TO_CHAR(SYSDATE, 'SS') - 5);
BEGIN
V_ERROR := 'USER LOGON TEST 123!';
FOR V_USER IN C_USER LOOP
IF USER = V_USER.USERNAME THEN
V_ERROR := '用户 ' || USER || ' 已经在' || V_USER.MACHINE ||
'机器上进行了登陆,' || CHR(10) || '登陆时间为 ' ||
TO_CHAR(V_USER.LOGON_TIME, 'YYYY-MM-DD HH24:MI:SS') ||
',使用的程序为' || V_USER.PROGRAM || ',' || CHR(10) ||
'请先关闭它后,再进行登陆!';
RAISE ERR_LOGON;
--EXIT;
END IF;
END LOOP;
EXCEPTION
WHEN ERR_LOGON THEN
RAISE_APPLICATION_ERROR(-20101, V_ERROR);
WHEN OTHERS THEN
NULL;
END;
/ |
|