A. pls-00103存儲過程編譯失敗
1. CURSOR curXXXX IS select .... from ... 而不用 for 2. item = @item ,@item是sqlserver的變數定義方法吧? 這兒能不能好? 我不確定 3. company = company code = code 到底哪個是欄位名、那個是變數名,建議不要用和欄位名相同的變數名。
B. 存儲過程有什麼優缺點為什麼要用存儲過程
存儲過程是一組予編譯的SQL語句
它的優點:1.允許模塊化程序設計,就是說只需要創建一次過程,以後在程序中就可以調用該過程任意次。
2.允許更快執行,如果某操作需要執行大量SQL語句或重復執行,存儲過程比SQL語句執行的要快。
3.減少網路流量,例如一個需要數百行的SQL代碼的操作有一條執行語句完成,不需要在網路中發送數百行代碼。
4.更好的安全機制,對於沒有許可權執行存儲過程的用戶,也可授權他們執行存儲過程。
C. oracle 創建簡單存儲過程出現編譯錯誤
create procere axx_song
as
--測試
count_num number :=0; --聲明一個變數接收我們的結果
begin
select count(*) into count_num from alert_qt;
dbms_output.put_line(count_num);--這個函數是輸出信息到控制台.
end axx_song;
這個才是存儲過程.區別於存儲函數..函數必須有返回值.而存儲過程可以沒有,
D. 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
E. 什麼是存儲過程有什麼優點
存儲過程是事先經過編譯並存儲在資料庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。
優點:
1、重復使用:存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量:存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
(5)存儲過程禁止編譯擴展閱讀:
存儲過程的缺點:
1、更改比較繁瑣:如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣。
2、可移植性差:由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則需要將業務邏輯封裝在不特定於 RDBMS 的中間層中。
F. ORACLE 存儲過程無法編譯,編譯就卡死
你怎麼查的鎖?v$locked_object?dba_ddl_locks查了沒,可能是ddl的鎖,如果不能編譯,一編譯就死,也可能是ddl的鎖導致的,以前碰到過。如果能找到鎖,那就簡單了。
不過還碰到過一種特別扯淡的情況,關掉自己的連接,然後換一台電腦從新來過,就OK了,這種情況也碰到過。
G. 關於sqlserver存儲過程的編譯的問題
只編譯一次。
在發布存儲過程時就編譯一次,頁面上只要調用就可以,兩次打開就是調用兩次存儲過程
H. 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即可。
I. ORACLE存儲過程如下:不能編譯,不能刪除,存儲過程顯示紅X。代碼沒有錯因為在別的庫中葉是這段代碼。
確認是否用到了不存在的表,或者因為許可權原因某些能訪問的資料庫對象不能訪問