我有一个嵌套表,其中包含一个电子邮件列表,它可能会在里面出现几次。问题是我需要得到项目的不同列表,以及它在列表中出现的次数。
| emails |
| ------------ |
| a@mail.com |
| b@mail.com |
| c@mail.com |
| d@mail.com |
| c@mail.com |
| c@mail.com |
| a@mail.com |
| a@mail.com |
| b@mail.com |
| b@mail.com |
| c@mail.com |
理想情况下,我的结果将是一个表或一个输出,告诉我以下内容:
| Email | Number |
| ---------- | - |
| a@mail.com | 3 |
| b@mail.com | 3 |
| c@mail.com | 4 |
| d@mail.com | 1 |
要从表中进行选择,我将使用select语句,但如果我在代码中尝试这样做,则会出现错误“ORA- 00942:表或视图不存在”,即使是简单的从电子邮件表中选择也是如此,所以我猜您不能以这种方式在嵌套表上使用select。
巢状数据表的建立方式如下:
type t_email_type is table of varchar2(100);
t_emails t_email_type := t_email_type();
然后填充到一个循环下,该循环为循环的每次迭代添加一个电子邮件:
t_emails.extend;
t_emails(t_emails.LAST) := user_r.email;
2条答案
按热度按时间yqlxgs2m1#
我试着做你描述到目前为止;给你:
包含电子邮件地址的表(其中某些地址重复):
您创建的类型;我 * 认为 * 您在PL/SQL过程中使用了类型。如果它是一个应该返回该类型结果的函数,那么它将不起作用,因为它必须在SQL级别创建,所以-这就是我正在做的:
函数:
FOR
循环从表中选择电子邮件地址,并将其放入t_emails
。您感兴趣的是第12 -14行中的内容,它显示了如何返回结果:好,让我们来测试一下:
不同的地址;这是你要的
gudnpqoy2#
试试看:
这段代码的外部代码块只是用来生成数据并将其插入到您定义的类型(t_email_type)的电子邮件变量中。您可能只需要内部代码块就可以获得在表类型中出现次数的电子邮件列表。
提供预期结果的SQL实际上是内部块中的游标:
结果:
| 电子邮件|出现次数|
| - -|- -|
| a@mail.com | 三个|
| b@mail.com | 三个|
| c@mail.com | 四个|
| d@mail.com | 一个|
此致