当前位置:首页 » 存储配置 » oracle编译存储过程卡死

oracle编译存储过程卡死

发布时间: 2025-03-31 18:08:54

A. oracle存储过程为什么一编译就挂死,是锁住了吗是不是跟表一样有锁的机制怎么解锁呢

不是因为锁住了,是因为你编译的时候,正好有人在调用你的那个存储过程,

B. 问一个关于Oracle的存储过程出现invalid的问题

Oracle中遇到“See无效”的错误提示,意味着存储过程未能成功编译。在编写存储过程、函数或包时,都需要经过编译才能在Oracle数据库中使用。如果存储过程显示无效,那么它在编译过程中出现了问题。

具体来看,See存储过程的问题在于使用了独立的SELECT查询语句。在Oracle中,存储过程不允许存在独立的SELECT查询语句,即不能直接返回结果集的SELECT语句。这一限制是因为Oracle的PL/sql语句块设计如此。

如果你需要让存储过程返回结果集,可以考虑使用游标来实现。游标是一种处理数据集的方法,可以在存储过程中用来临时存储和处理查询结果。另一种方法是使用索引表,这是一种特殊的表结构,可以作为存储过程的输出参数。

需要注意的是,SQL Server用户可能会遇到这种问题,因为SQL Server允许独立的SELECT查询语句。但在Oracle中,为了保持数据一致性、安全性和性能,这种直接返回结果集的查询语句被禁止。

因此,当编写Oracle存储过程时,应避免使用独立的SELECT查询语句,并考虑使用游标或索引表来返回结果集。通过这种方式,可以确保存储过程在编译时不会出现无效的问题。

C. oracle 编译包的时候,一直提示正在编译

编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法:

1.可能被锁住

查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b

where a.SID = b.SID

得到死锁session的SID,SERIAL#参看这个是否为你自己用户下的,然后kill掉session

2.可能被挂起

查看v$session_waitselect b.serial#,a.* from v$session_wait a,v$session
bwhere a.sid = b.sid得到等待的session的sid和serial#3.查看dba_ddl_locksselect
session_id sid, owner, name, type,

mode_held held, mode_requested request

from dba_ddl_locks
where name = '&your_package_name'

D. Oracle使用merge into 编写存储过程 遇编译错误:PL/SQL: ORA-00926: 缺失 VALUES 关键字

Oracle使用猜码掘merge into 编写存储过程 遇编译错误,是设置错误造成的,解决方法如下:

1、首先穗核新建存储过程,Create or ReplaceProcere CHK_SYS_EMP 检查系统工号。

E. ORACLE 存储过程无法编译,编译就卡死

你怎么查的锁?v$locked_object?dba_ddl_locks查了没,可能是ddl的锁,如果不能编译,一编译就死,也可能是ddl的锁导致的,以前碰到过。如果能找到锁,那就简单了。
不过还碰到过一种特别扯淡的情况,关掉自己的连接,然后换一台电脑从新来过,就OK了,这种情况也碰到过。

F. oracle存储过程 处于无效状态

1、你的存储过程有错误,编译不通过。处理于无效状态。
2、问题
存储过程中隐式游标的select语句必须要有into子句。
而select*fromtemp_syckzl_zy这是一个没有意义的语句;
应改为如:selectcol1intov_col1fromtemp_syckzl_zy;
注:col1为表中一字段,v_col1为一变量

G. ORACLE 存储过程被锁,编译不了,怎么解锁

可用SYS登录,然后查询如下语句:
查找存储过程OPERATIONDATA_IMP被哪些session锁住而无法编译
select * FROM dba_ddl_locks where name =upper('OPERATIONDATA_IMP');
从而得到session_id,然后通过
select t.sid,t.serial# from v$session t
where t.sid=&session_id;
得到sid和serial#
最后用alter system kill session 'sid,serial#'; kill 相关session即可。

H. ORACLE 存储过程被锁,编译不了,怎么解锁

一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。
1.下面的语句用来查询哪些对象被锁:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id=o.object_id and l.session_id=s.sid;
2.下面的语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
【注】以上两步,可以通过Oracle的管理控制台来执行。
3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)
4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345

I. Oracle 定义存储过程不能执行怎么办

无效状态有两种可能:

1、一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。

热点内容
java汉诺塔递归算法 发布:2025-04-02 06:28:40 浏览:120
可执行文件是编译链接后生成的文 发布:2025-04-02 04:36:44 浏览:168
电脑文件加密软件免费 发布:2025-04-02 03:02:51 浏览:800
php图片管理 发布:2025-04-02 03:01:11 浏览:260
然后弄编程 发布:2025-04-02 02:54:06 浏览:107
解压室俱乐部 发布:2025-04-02 02:47:04 浏览:276
安卓哪里下载文豪野犬 发布:2025-04-02 02:45:04 浏览:786
优酷安卓怎么免广告 发布:2025-04-02 02:30:07 浏览:830
安卓系统怎么把繁体字改为简体字 发布:2025-04-02 02:14:39 浏览:321
androidpos机 发布:2025-04-02 01:40:54 浏览:370