create or replace procedure postxnDayCut (dates varchar2)
is
sqlText varchar2(2000);
process_sid number(10);
process_serial number(10);
nums number;
cursor process_cursor is select t.sid,t.serial# from v$session t where sid in (select sid from v$lock where id1 in
(select object_id from dba_objects where object_name=upper('t_posp_txn')));--要对系统表分配权限
begin
--循环杀掉正在占用的所有进程。
FOR t IN process_cursor LOOP
begin
process_sid:=t.sid;
process_serial:=t.serial#;
sqlText:= q'(alter system kill session 'process_sid,process_serial')';--转义
execute immediate sqlText;
end;
end loop;
sqlText:= 'grant create table to btupayprovince';
execute immediate sqlText;
--删除临时表
sqlText:= 'truncate table t_posp_txn_tmp';
execute immediate sqlText;
sqlText:= 'drop table t_posp_txn_tmp';
execute immediate sqlText;
报错显示16行,杀进程sql的execute那里。
报错显示:
ORA-00026: 丢失或无效的会话 ID
ORA-06512: 在 "BTUPAYPROVINCE.POSTXNDAYCUT", line 16
ORA-06512: 在 line 3
查看错误堆栈的程序源?
求人解答,在这篇帖子看到同样的问题,http://bbs.csdn.net/topics/360265084
但依然没看见有价值的信息。
如果是转换为变量,我也用了,但还是报错。。
另外我在csdn提问的帖子:http://bbs.csdn.net/topics/391050145?page=1#post-399315385
100分的问题,隔了一天没人回复。。。
知道的那边分也带走吧。。
就这么多吧,求高人。。知道没那么多分了。。谢谢了先。。。
估计你SQL 拼接错了吧,建议打印一下;
我的测试过程;
--新建一个会话窗口,挂起一个会话;大哥,你好牛哇,确实是转义 ’ 时候拼接错了,正确格式是q'{}' ,不是小括号。。用‘ 转义也可以。实在是非常高感谢。。