求教oracle存储过程的赋值和更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教oracle存储过程的赋值和更新相关的知识,希望对你有一定的参考价值。
第1步:查询表1,根据表1的phone字段查看name字段是否有值。
第2步:如果表1的name字段没有值,根据表2的phone字段查询出的name,update到表1的name字段。
--本存储过程假设phone与name一一对应,即不会出现一个phone对应多个name的情况
--如果实际情况不为一一对应,请在自行完善存储过程
--①首先查出表1中phone不为空并且name 为空的记录,并建立游标
cursor cur_row is
select phone from table1 where table1.name is null and phone is not null;
--②遍历游标cur_row的phone字段,去表2中查询出name并更新到表1中
for v_num in cur_row loop
--下面的v_name应该先声明,这里直接用了,类似情况不再做说明
--下面的select into 未做异常处理,请自行完善,类似情况不再做说明
select name into v_name from table2 where table2.phone=v_num.phone;
update table1 set table1.name = v_name where table1.phone = v_num.phone;
end loop;
--统一提交
commit;
--完成
--纯手打,可能有错别字,请自行修正追问
哥们,给我下你的QQ号,得详细问你,这样说不清楚,我就是一新手。
参考技术B create or replace procedure xx isbegin
declare
--类型定义
cursor c_tb_1
is
select name,phone
from tb_1
where name is null or name = '';
c_row c_rb_1%rowtype;
begin
for c_row in c_rb_1 loop
update tb_1 set name=(select name from tb_2 where phone=c_row.phone);
end loop;
end;
end xx;
等保证update tb_1 set name=(select name from tb_2 where phone=c_row.phone);这句查询条件的唯一性追问
哥们 给我你QQ,我得问问你 这样说不明白
本回答被提问者采纳 参考技术C 更新条件是?oracle存储过程中update语句一直在执行中,无法更新完成
入参in_yf是月份,格式如:“201501”,在log_insert表中month字段类型是varchar2(6),这个表很小(五行数据),但是执行这个过程,10分钟后还在执行,也不报错。不知道哪里出问题了,求教!
可能这个表被别的用户锁了;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#\'; 参考技术A 尝试更改sql脚本如下所示:
create or replace procedure test_wz(in_yf in varchar2)
is
v_yf varchar(50);
begin
v_yf:=in_yf;
update log_insert -- 不要用别名
set zfsjdc_date=sysdate
where month=v_yf and unusual_flag='0';
-- 去掉commit;因为你不是在Oracle SQL PLUS环境下执行。
end test_wz; 参考技术B 表锁了,应该是有别的程序操作了这条记录,没有提交事物。本回答被提问者采纳
以上是关于求教oracle存储过程的赋值和更新的主要内容,如果未能解决你的问题,请参考以下文章