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属于关联更新,方法如下。
有以下两张表: