以某一查询结果作为更新结果
update t_infe set name = (
select t_pub.name from t_pub where t_pub.id = 21
)
-- update语句的限制条件
where t_infe.t_pub = 21;
该写法要求select
语句只能返回一个一行一列的结果集。update
的where
条件是必不可少的,select
语句的where
条件只是用来限制查询的结果集的,不要误认为是update
语句的限制条件。如果缺少update
语句的where
限制条件,会将全部的记录进行更新。
现在将上面的语句应用到过程
当中去。
create or replace procedure public.init_t_inf_pub()
language plpgsql
as $procedure$
begin
for i in 1..100 loop
update t_infe set name = (
select t_pub.name from t_pub where t_pub.id = i
)
where t_infe.t_pub = i;
end;
$procedure$
call init_t_inf_pub();
该过程在for循环内写死了起止范围,这不重要。该过程的作用是动态地将t_pub.id从1到100的记录中的name字段的值对应地,对应地,对应地添加到t_infe中去。