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

oracle存储过程没法编译

发布时间: 2023-09-06 03:47:58

‘壹’ ORACLE 存储过程无法编译,编译就卡死

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

‘贰’ 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

‘叁’ ORACLE存储过程批量未编译

对存储过程中用到的表进行过alter处理
譬如你对存储过程中用到的表a,加了一个字段,虽然对存储过程中整体内容不影响,但是alter处理后,你会发现,这些存储过程变成未编译通过的了,这个时候只要重新编译一下就行,当然也有alter后,存储过程编译不过去的情况,这个时候你就需要重新写里边的内容了

‘肆’ oracle 创建存储过程报错, PACKAGE BODY SCOTT.EMP_SAL_MANAGEMENT 编译错误

子程序或游标 'P_P_BONUS' 已在程序包说明中声明, 必须在程序包体中对其进行定义。意思是你已经声明了这个存储过程P_P_BONUS,但是没有在包体(PACKAGE BODY )中定义,就是你还需要在包体中定义P_P_Bonus的实现部分

‘伍’ oracle存储过程 编译有问题

存储过程存有三种类型的参数
1、in (只能传入值,在程序中不能修改)
2、out (必须在程序中赋值)
3、in out (兼顾以上两点)

所以你的错误在于 你的 name 是 in 类型,因此在程序中是不能给其赋值的
select name into name from users;
是错误的,改成out 类型就可以了。

‘陆’ Oracle 定义存储过程不能执行怎么办

无效状态有两种可能:

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

‘柒’ 写了一个Oracle存储过程,编译没通过,请帮忙看下哪里有语法问题。

有错误啊!

create or replace procere adjust_inventory(p_goods_id in number,p_adjust_count in number)
as
declare
goods_count number(6,0);
adjust_goods_name number(6,0);
begin
if (p_goods_id is null) then
dbms_output.put_line( '商品ID为空,不能操作');
return;
end if;
select surplus into goods_count from y_goods where goods_id =p_goods_id;
if (goods_count < p_adjust_count) then
dbms_output.put_line( '商品调整数量大于库存量,不能操作');
return;
end if;
update y_goods set surplus = surplus - p_adjust_count where goods_id = p_goods_id;
select surplus into goods_count from y_goods where goods_id = p_goods_id;
select goods_name into adjust_goods_name from y_goods where goods_id = p_goods_id;
dbms_output.put_line( goods_name || '的库存成功调整,目前库存数量为' || goods_count);
end;
end adjust_inventory;

热点内容
落樱小屋哪里下载安卓 发布:2025-01-27 12:35:13 浏览:71
微信服务器IP跳转 发布:2025-01-27 12:26:54 浏览:73
oracle自动备份脚本linux 发布:2025-01-27 12:21:40 浏览:936
pop服务器密码怎么填 发布:2025-01-27 12:20:02 浏览:968
oraclesqlnumber 发布:2025-01-27 12:04:22 浏览:849
如何看三才配置数理暗示力 发布:2025-01-27 12:04:15 浏览:811
我的世界离线2b2t的服务器 发布:2025-01-27 11:51:25 浏览:144
网站被异常篡改访问有风险 发布:2025-01-27 11:50:01 浏览:431
光遇国际服脚本全部图 发布:2025-01-27 11:47:40 浏览:139
ios资源加密 发布:2025-01-27 11:36:33 浏览:816