oracleupdate存儲過程
A. oracle中的存儲過程有什麼作用,該怎麼理解(數據更新的話用update語句不就完了嗎)
1.存儲過程可以使得程序執行效率更高、安全性更好,因為過程建立之後 已經編譯並且儲存到資料庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql注入
2.建立過程不會很耗系統資源,因為過程只是在調用才執行。
3.存儲過程可以用於降低網路流量,存儲過程代碼直接存儲於資料庫中,所以不會產生大量T-sql語句的代碼流量。
4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用 (RPC) 處理伺服器上的存儲過程而提高性能。RPC 封裝參數和調用伺服器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,並只需插入更新的參數值。
5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。
6.代碼精簡一致,一個存儲過程可以用於應用程序代碼的不同位置。
7.增強安全性:
a、通過向用戶授予對存儲過程(而不是基於表)的訪問許可權,它們可以提供對特定數據的訪問;
b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數);
c、SqlParameter 類指定存儲過程參數的數據類型,作為深層次防禦性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至資料庫前得到附加驗證)。
B. oracle 存儲過程裡面有一條update語句會造成主鍵沖突 如何捕獲這個異常 取消這個update 繼續運行
使用begin end塊把update語句的異常捕獲後處理一下,就只會影響條記錄,而不是回滾整批數據。
C. oracle的存儲過程中,有2條update語句,那2次update是默認在同一個事務中還是分別執行相互沒有影響
存儲過程
裡面。
如果你沒有在兩條
SQL
語句之間,寫
Commit
/
rollback
之類的語句。
那麼這2條
update
是默認在一個事務裡面的。
D. 怎樣把oracle的update語句改成存儲過程
更新數據存儲過程
CREATE OR REPLACE PROCEDURE update_emp_proc(myempno IN NUMBER,myename IN VARCHAR2) AS
BEGIN
UPDATE emp SET ename=myename WHERE empno=myempno;
END;
E. oracle存儲過程中update語句一直在執行中,無法更新完成
可能這個表被別的用戶鎖了;
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;
--殺掉會話
alter system kill session 'sid,serial#';
F. oracle 存儲過程循環執行update語句
其實二樓寫的最簡單,但對於新手,最好別那麼寫,至於1樓,如果數據不是很多,沒必要搞個游標。你也可以看看我寫的
create or replace procere P_Update(o_vc_message out varchar2)
is
type column1 is table of table1.column1%type index by binary_integer;
col1s column1;
type rid is table of rowid index by binary_integer;
rids rid;
temp table1.column1%type;
begin
select column1,rowid bulk collect into col1s,rids from table1;
if (column1.count != 0) then
for i in col1s.first..col1s.last loop
temp := col1s(i);--處理 col1s(i) 想幹嘛幹嘛
update table1 set column1 = temp where rowid = rids(i);
end loop;
end if;
o_vc_message := 'OK!';
exception
when others then
o_vc_message := 'exception happend.' || sqlcode || sqlerrm;
rollback;
return;
end P_Update;
如果僅僅是簡單處理column1,比如加1什麼的,就別搞那麼復雜,一個sql就ok了。
G. oracle資料庫update存儲過程
update a
set a3=xx
where a1 in (
select distinct b2
from b
where b3 < add_months(sysdate,1))
H. oracle存儲過程不能寫update語句
你的commit呢?
你第一次update沒有問題,可是你這是一個循環,當第二次update時就會出現問題的,你跟蹤下,第一次執行時應該是通過的,報錯應該是第二次執行的時候報的。
I. oracle存儲過程update select怎麼寫急要。。。
update select屬於關聯更新,方法如下。
有以下兩張表: