栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

遍历循环以查找重复的名称

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

遍历循环以查找重复的名称

为此,请不要在PL / SQL的循环内进行循环-使用SQL为您准备好要使用的数据。

首先,我们使用一些测试数据创建表(我正在猜测数据类型-您将使用自己的数据类型进行替换):

create table product_master (   product_no        varchar2(10) , product_holder    varchar2(10) , product_catalogue varchar2(10))/insert into product_master values ('1', 'SMITH', 'TEMP')/insert into product_master values ('2', 'SMITH', 'TEMP')/insert into product_master values ('3', 'HARRY', 'ARCH')/insert into product_master values ('4', 'TOM'  , 'DEPL')/commit/

我们想要发送给

mail_send
过程的
product_holder
是包含
product_no
和的集合(数组)
product_catalogue
。因此,首先是一个包含这两个元素的类型:

create type t_prod_cat_no as object (   product_no        varchar2(10) , product_catalogue varchar2(10))/

然后是该类型的嵌套表类型(集合类型):

create type t_prod_cat_no_table as   table of t_prod_cat_no/

mail_send
然后,该过程应接受
product_holder
和的收集类型:

create or replace procedure mail_send (   p_parameter        in varchar2 , p_product_holder   in varchar2 , p_product_cats_nos in t_prod_cat_no_table)isbegin   dbms_output.put_line('-- BEGIN '||p_parameter||' --');   dbms_output.put_line('Dear '||p_product_holder);   dbms_output.put_line('Your products are:');   for i in 1..p_product_cats_nos.count loop      dbms_output.put_line(         'Catalogue: '||p_product_cats_nos(i).product_catalogue||         ' - No: '||p_product_cats_nos(i).product_no      );   end loop;end mail_send;/

(我只是使用dbms_output来模拟构建邮件。)

然后,您可以在SQL中执行

group by product_holder
并让SQL生成包含数据的集合:

begin   for holder in (      select pm.product_holder, cast(     collect(        t_prod_cat_no(pm.product_no,pm.product_catalogue)        order by pm.product_catalogue    , pm.product_no     ) as t_prod_cat_no_table  ) product_cats_nos         from product_master pm       group by pm.product_holder       order by pm.product_holder   ) loop      mail_send(         'PRODMASTER'       , holder.product_holder       , holder.product_cats_nos      );   end loop;end;/

上面的块的输出将是:

-- BEGIN PRODMASTER --Dear HARRYYour products are:Catalogue: ARCH - No: 3-- BEGIN PRODMASTER --Dear SMITHYour products are:Catalogue: TEMP - No: 1Catalogue: TEMP - No: 2-- BEGIN PRODMASTER --Dear TOMYour products are:Catalogue: DEPL - No: 4

使用SQL在SQL中执行此操作,

GROUP BY
可以通过PL /
SQL到SQL的单个调用为您提供一切,这比第一个调用获取独特的
product_holder
,循环遍历,然后每个
product_holder
获取一个调用的效率要高得多。每个持有人的产品。

更新:

在上面的代码中添加

order by
collect
函数中,以显示您可以控制集合中数据的填充顺序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号