Oracle PLSQL中的多值列

时间:2013-05-27 17:44:24

标签: sql oracle

我正在为Oracle工作中的项目创建一个小型数据库。其中一列需要记录多个值。创建多值列的查询是什么?

2 个答案:

答案 0 :(得分:4)

如果您需要用户输入多个电子邮件地址,我会考虑创建一个USER_EMAIL表来存储此类记录。

Create Table User_Email (User_Id int, Email varchar(100));

User_Id将是foreign key,可以返回到您的USER表。

然后,每个用户可以拥有1-n个电子邮件地址。这通常是数据库规范化的最佳实践。如果您的电子邮件具有不同的类型(即工作,个人等),您可以在该表中为该类型添加另一列。


如果您需要在单个列中返回行,则可以使用LISTAGG查看:

select u.id,
  listagg(ue.email, ', ') within group (order by ue.email) email_addresses
from users u
  left join user_email ue on u.id = ue.user_id
group by u.id

答案 1 :(得分:0)

您可以尝试在Oracle列中使用VARRAY列。

查看此页面:https://www.orafaq.com/wiki/VARRAY

您可以在此处看到

  1. 类型声明:
  

创建或替换vcarray为VARCHAR2(128)的VARRAY(10);

  1. 表的声明:
  

创建表varray_table(ID号,col1 vcarray);

  1. 插入:
  

插入varray_table值(3,vcarray('D','E','F'));

  1. 选择:
  

选择t1.id,t2.column_value
  FROM varray_table t1,TABLE(t1.col1)t2
  其中t2.column_value ='A'或t2.column_value ='D'