繁体   English   中英

oracle:使用PL / sql过程从另一个模式填充表

[英]oracle: populate a table from another schema using PL/sql procedure

嗨,我是pl / sql中的newb :),这仅是出于教育目的。 schama Dispatching,包括一个名为Employes。的表,以及PRF schema,其中包括一个名为ZONE的表。

调度:雇员(num_emp号,名称nvarchar2,design_unit varchar2,design_zone varchar2)PRF:ZONE(num_zone号,design_zone varchar2,number_of_units号) 问题是正在编写一个pl / sql过程以从Employes表填充ZONE表。 这是我的程序:

create or replace procedure zoneD as

cursor   cur is select design_zone,design_unit from dispatching.employes group by design_zone,design_unit;  
varzone  cur%rowtype;



begin

open cur;

fetch cur into varzone;loop
exit when cur%notfound;

 insert into zone(num_zone,design_zone,nbr_of_unit) values (num_zone.nextval,varzone.design_zone,0);

 update zone set nbr_of_unit =( select count(design_unit) from dispatching.employes);

end loop;


close cur;


end zoneD;

单位是一个城镇,每个区域包含许多单位。 以一种简单的方式,问题程序不会插入数据,我不知道这是否是正确的方法。 (对不起我的英语:))。

看来您已连接为PRF,并希望获取属于DISPATCHING用户的值。 为此,DISPATCHING必须(至少)将其EMPLOYEES表上的SELECT授予PRF:

-- connect as DISPATCHING
grant select on employees to prf;

一个过程(在您练习PL / SQL时)应该利用游标FOR循环,因为它比使用显式声明的游标的循环(因为您不需要声明它以及变量)更容易维护。您需要将其值存储到中),打开它,担心何时退出循环,最后-关闭它。 游标FOR循环为您完成所有操作(确定,除了编写与声明显式游标时要使用的SELECT语句相同的SELECT语句外)。

-- connect as PRF
create or replace procedure zoned as
begin
  -- cursor FOR loop - you can select both DESIGN_ZONE and count number of
  -- units so that you wouldn't have to update that value separately
  for cur_r in (select e.design_zone, count(*) number_of_units
                from dispatching.employees e  -- naming the owner which granted SELECT on its table to PRF user
                group by e.design_zone
               )
  loop
    insert into zone (num_zone, design_zone, number_of_units)
      values (num_zone.nextval, cur_r.design_zone, cur_r.number_of_units);
  end loop;
end;
/

那应该做(除非我打错了)。

最后,如果可以的话,我建议:请正确格式化您的代码。 您发布的内容一团糟,很难看清-没有缩进,行太长(将其折断!),并且只包含几行。 想象一下,当您有成千上万的代码行时会发生什么-您期望调试谁? 使用该代码后仅一两个月,您会忘记所做的事情以及原因(请注释一下),并且-如果未格式化,则会感到头痛。 当今的GUI工具提供自动格式设置,因此请使用它。 否则,有免费的在线格式化程序,例如Instant SQL Formatter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM