当前位置:首页 » 存储配置 » oracle存储过程update

oracle存储过程update

发布时间: 2022-06-01 12:43:13

Ⅰ 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属于关联更新,方法如下。

有以下两张表:

热点内容
win7的缓存文件夹 发布:2025-01-12 23:32:12 浏览:954
安卓哪个文件锁好 发布:2025-01-12 23:31:23 浏览:325
怎么让安卓用苹果耳机有弹窗 发布:2025-01-12 23:30:34 浏览:958
oracle存储过程有返回值 发布:2025-01-12 23:30:34 浏览:7
用友服务器怎样同步ip 发布:2025-01-12 23:29:52 浏览:979
qt编译vlcqt库 发布:2025-01-12 23:24:45 浏览:244
攻击linux服务器 发布:2025-01-12 23:17:01 浏览:6
天籁哪个配置亲民 发布:2025-01-12 23:16:26 浏览:482
零售通交易密码是什么 发布:2025-01-12 23:13:02 浏览:319
监控器压缩 发布:2025-01-12 22:51:29 浏览:248