oracle存儲過程update
Ⅰ 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了。
Ⅱ oracle的存儲過程中,有2條update語句,那2次update是默認在同一個事務中還是分別執行相互沒有影響
存儲過程
裡面。
如果你沒有在兩條
SQL
語句之間,寫
Commit
/
rollback
之類的語句。
那麼這2條
update
是默認在一個事務裡面的。
Ⅲ oracle存儲過程不能寫update語句
你的commit呢?
你第一次update沒有問題,可是你這是一個循環,當第二次update時就會出現問題的,你跟蹤下,第一次執行時應該是通過的,報錯應該是第二次執行的時候報的。
Ⅳ oracle存儲過程update執行很慢(50多萬條需要更新),求大神指點
哥們,使用中間表試試. 也許能快一些
-- 1.先把需要修改的數據查詢出來 ,放入中間表1
DROP TABLE T_TABLE1;
CREATE TABLE T_TABLE1 AS SELECT * FROM T_TABLE WHERE ...;
DELETE TABLE T_TABLE1 WHERE ...;
-- fun_c(C) 代表C 欄位更新邏輯的函數.
DROP TABLE T_TABLE2;
CREATE TABLE T_TABLE2 AS SELECT A,B,fun_c(C),... FROM T_TABLE1;
INSERT INTO T_TABLE1 SELECT * FROM T_TABLE2;
Ⅳ oracle 存儲過程 update set select 更新不成功
改成 update tmp_tableA a set(a.xxx,a.xxxx) =(select b.xxx,b.xxx from tableB b where a.phone_no=b.phone_no and rownum=1)where a.phone=v_date.phone_no ,確認一下是不是只對應出一條。
嘗試換一種游標方式:
在開頭部分先定義游標和變數
TYPE cur IS REF CURSOR;
my_cur cur;
lc_phoneno varchar2(30);
在過程中這樣使用:
open my_cur for select phone from tmp_tableA;
loop
fetch mu_cur into lc_phoneno;
EXIT WHEN my_cur%NOTFOUND;
update tmp_tableA a set(a.xxx,a.xxxx) =(select b.xxx,b.xxx from tableB b where a.phone_no=b.phone_no )where a.phone=lc_phoneno;
end loop;
commit;
close my_cur;
Ⅵ 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#';
Ⅶ oracle存儲過程中update語句的提交問題
後面是必須跟commit的,
看下是不是打開了自動提交
show
autocommit;
如果是on的話,就能解釋你這個是什麼情況了。
還有就是你在執行之後是不是做了用戶切換,切換用戶,用的是connect命令,是會提交事務的。
Ⅷ oracle存儲過程update select怎麼寫急要。。。
update select屬於關聯更新,方法如下。
有以下兩張表: