⑴ ORACLE多人同時執行一條存儲過程,會不會有影響
你這樣屬於2個事務在操作一個表。如果表中有唯一鍵,會有一個過程失敗的。如果沒有唯一鍵,會寫入20000條記錄。但是如果存儲過程里操作的表是動態傳進去的。如果表名不同,同時執行多個這個存儲過程是沒有影響的。
⑵ 求助多個用戶同時調用同一個存儲過程
可以從這幾個方面考慮1、限制會話數量,防止多個會話出現2、在多個會話中調用存儲過程前增加檢測調用狀態的功能3、在存儲過程pro中增加當前運行狀態的功能,防止重復運行4、在結果表增加唯一索引,防止出現重復記錄解決問題的途徑總是很多,需要程序開發人員和DBA共同溝通解決。
⑶ 存儲過程如何實現存儲過程的並發執行
這個問題一般是數據鎖造成的,INSERT的時候一般不會遇到這種問題,你在A或者B存儲過程中查看一下,一定有UPDATE語句或者 SELECT FOR UPDATE語句,兩個並發的請求同時鎖一條記錄就會造成一條成功另一條失敗。
不過按照你的描述最大的可能性是另外一種情況,就是兩次INSERT插入的數據某個欄位是相同的值,好死不死的,這個相同值的欄位又設置了唯一索引或者約束,那麼當第一條記錄插入成功後第二條記錄就會必然失敗回滾。
⑷ 存儲過程並發,存儲過程在同一個時間裡面執行了多次,導致數據多次修改
在調用存儲過程的程序中加上線程同步控制,避免同時調用
java程序示例
=newObject();
publicvoidpay(){
synchronized(payLock){
//TODO下方寫調用存粹過程的調用
}
}
⑸ 一個存儲過程可以調用兩個存儲過程嗎
直接調用就可以了。舉個例子把 B 存儲過程調用A 存儲過程。
PROCEDURE A (p_1 in number,p_2 out number)
is
v_1 number;
begin
V_1:=p_1;
p_2:=v_1;
end A;
(1)如果A 與B同在一個package裡面的話。那麼 B裡面直接可以調用A
PS:如果A,B在同一個Package 中無法調用的話,那麼很可能是A,B在Spec里沒有聲明。一個package包含Spec 和Body,兩層。不能調用很可能沒有聲明。聲明後應該ok!
PROCEDURE B(p_1 in number)
is
v_result number;
begin
v_result =A(p_1);
end B;
其中v_result就是調用A的結果,A的返回值。
(2)如果A與B不在同一個package的話
那麼B在調用A 的時候,需要加上pkg的名字
比如:A 存儲過程在pkg :xxom_test_pkg 中
PROCEDURE B(p_1 in number)
is
v_result number;
begin
v_result = xxom_test_pkg .A(p_1);
end B;
----------------------------------------------------------
以上簡單介紹了存儲過程的調用。
希望對你有幫助
⑹ 如何讓oracle並發執行同一個存儲過程呢(參
可以利用java或其它開發工具編寫多線程來執行存儲過程,這樣你可以完成你的復雜控制。
⑺ 能不能在一個存儲過程中並行執行sql
能不能在一個存儲過程中並行執行sql
存儲過程本來就是多條語句
你也可以通過存儲過程調用其他存儲過程execute ("exec b存儲過程")提交回答
⑻ SQL2005 同一個存儲過程可以由多程序同時調用並根根不同程序調用返回不同結果嗎
都是傳到存儲過程裡面不同參數!返回不同結果!
存儲過程支持並發的!
CREATE PROCEDURE [dbo].[aa](@i int) AS
begin
select @i*2
end
GO