为什么编译不过呢???

zqhnf 2002-09-25 06:32:05
CREATE OR REPLACE PROCEDURE SP_KILL_SESSION
AS
V_DATE VARCHAR2(11);
V_SID NUMBER;
V_SERIAL# NUMBER;
v_mm varchar2(40);


CURSOR CUR_KILL_SESSION IS
SELECT SID,SERIAL# FROM V$SESSION
WHERE TO_CHAR(LOGON_TIME,'YYYY/MM/DD') LIKE V_DATE;
BEGIN
SELECT TO_CHAR(SYSDATE - 1,'YYYY/MM/DD') into V_DATE FROM DUAL;

OPEN CUR_KILL_SESSION;
LOOP
FETCH CUR_KILL_SESSION INTO V_SID,V_SERIAL#;
EXIT WHEN CUR_KILL_SESSION%NOTFOUND;


v_mm:=to_char(v_sid)||','||to_char(v_serial#);

if v_mm is not null or v_mm<>'' then
ALTER SYSTEM KILL SESSION 'v_mm';
end if;
END LOOP;
CLOSE CUR_KILL_SESSION;

END;
...全文
44 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingSunSha 2002-09-27
  • 打赏
  • 举报
回复
不能这样子杀进程的,至少你要先判断一下进程时候active,如果进程在active状态,是不能直接杀死的,而且当前进程也不可能直接杀掉
qiuyang_wang 2002-09-27
  • 打赏
  • 举报
回复
存储过程中不支持alter,你可以将存储过程写在包中,用execute immediate 来实现。
zcs_1 2002-09-25
  • 打赏
  • 举报
回复
这样试试:

CREATE OR REPLACE PROCEDURE SP_KILL_SESSION
AS
v_date VARCHAR2(11);
v_sid NUMBER;
v_serial# NUMBER;
v_mm VARCHAR2(40);
sql_stmt VARCHAR2(200);
CURSOR cur_kill_session(v_date1 VARCHAR2) IS
SELECT sid,serial#
FROM v$session
WHERE TO_CHAR(logon_time,'YYYY/MM/DD')=v_date1;
BEGIN
SELECT TO_CHAR(SYSDATE-1,'YYYY/MM/DD') into v_date FROM DUAL;
OPEN CUR_KILL_SESSION(v_date);
LOOP
FETCH CUR_KILL_SESSION INTO V_SID,V_SERIAL#;
EXIT WHEN CUR_KILL_SESSION%NOTFOUND;
sql_stmt := 'ALTER SYSTEM KILL SESSION '||CHR(39)||v_sid||','||v_serial#||CHR(39);
EXECUTE IMMEDIATE sql_stmt;
END LOOP;
CLOSE CUR_KILL_SESSION;
END;
/
jiezhi 2002-09-25
  • 打赏
  • 举报
回复
string是保留字,不可以拿来作变量
dsf 2002-09-25
  • 打赏
  • 举报
回复
string 是动态的SQL,可以将‘alter’之类的SQL写进去!
----------------------------
declare
string varchar2(1000);
begin
string:='alter................';
execute immediate string;
end;
zqhnf 2002-09-25
  • 打赏
  • 举报
回复
luckysxn(风子) ,我不明白,能再说清楚一点吗
luckysxn 2002-09-25
  • 打赏
  • 举报
回复
execute immediate string
zqhnf 2002-09-25
  • 打赏
  • 举报
回复
hyljqr(秋林),thanks!

那用过程怎么处理,怎么写呢?
hyljqr 2002-09-25
  • 打赏
  • 举报
回复
過程体中好像不能有Alter,Create這樣的命令
zqhnf 2002-09-25
  • 打赏
  • 举报
回复
是下面这一行
ALTER SYSTEM KILL SESSION 'v_mm';
luckysxn 2002-09-25
  • 打赏
  • 举报
回复
select * from user_errors;
看一下是哪一行吧。

3,498

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧