求教oracle存储过程的赋值和更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教oracle存储过程的赋值和更新相关的知识,希望对你有一定的参考价值。

第1步:查询表1,根据表1的phone字段查看name字段是否有值。
第2步:如果表1的name字段没有值,根据表2的phone字段查询出的name,update到表1的name字段。

参考技术A --本存储过程为简化版,格式、变量的定义等许多情况需要自行添加
--本存储过程假设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 is
begin
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存储过程的赋值和更新的主要内容,如果未能解决你的问题,请参考以下文章

Oracle存储过程中,查询结果有多行如何赋值

Oracle 如何给存储过程赋值

oracle 存储过程赋值的方法

大家帮忙看看Oracle存储过程怎样给变量赋值

oracle存储过程中声明变量并赋值的问题

oracle 存储过程 空值赋值问题