0.查询正在执行的存储过程:
select *
from v$db_object_cache
where locks > 0 and pins > 0 and type='PROCEDURE';
1. 在V$ACCESS视图中找到要停止进程的SID:
举例:存储过程名:CRH_ENTRY
SELECT t.* FROM V$ACCESS t WHERE t.object='CRH_ENTRY';
PS:查询时间与object数正正比。
2. 在V$SESSION视图中查找到查出SID和SERIAL#
SELECT SID,SERIAL# FROM V$SESSION WHERE SID='1314';
3.杀掉查找出来的进程
alter system kill session 'SID,SERIAL#'
alter system kill session '1314,63759';
在sqlplus中这两种方法都可以使用:
exec pro_name(参数1..); call pro_name(参数1..);
区别:
1. 但是exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.
2. 存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上().
Sql代码
SQL> --创建过程 插入数据
SQL> create or replace procedure pro1 is
2 begin --执行部分
3 insert into mytest values('张三', 'mm');
4 end;
5 /
Procedure created
SQL> exec pro1;
PL/SQL procedure successfully completed
SQL> call pro1;
call pro1
ORA-06576: 不是有效的函数或过程名
SQL> call pro1();
Method called
总结:在调用过程时,应该养成使用call,且要带上()的习惯。