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;