Oracle 想要在单行的单个列中插入多个数据的最佳解决方案吗

Oracle 想要在单行的单个列中插入多个数据的最佳解决方案吗,oracle,plsql,oracle11g,sqlplus,Oracle,Plsql,Oracle11g,Sqlplus,对于这段代码,每个Dname都有多个Boundary_dist。如果我可以使用varchar2(20)数组并插入所需的Boundary_dist,那就更好了。想要一些有用的建议。您需要为Boundary\u dist创建一个单独的表,并创建一个引用District\u Info表的外键。同意,最好将Boundary\u dist放在第二个表中,并用ID连接它们,但如果您通常必须将其存储为“1,2,3,4,5”在代码中,我可以通过使用explode的PHP或使用in的mysql非常轻松地处理它。正

对于这段代码,每个Dname都有多个Boundary_dist。如果我可以使用varchar2(20)数组并插入所需的Boundary_dist,那就更好了。想要一些有用的建议。

您需要为Boundary\u dist创建一个单独的表,并创建一个引用District\u Info表的外键。

同意,最好将Boundary\u dist放在第二个表中,并用ID连接它们,但如果您通常必须将其存储为“1,2,3,4,5”在代码中,我可以通过使用explode的PHP或使用in的mysql非常轻松地处理它。

正如前面提到的,理想的方法是为每个DName/Boundary\u Dist组合存储额外的行。使用如此简单的结构最简单的方法就是更改主键:

DROP TABLE District_Info;

CREATE TABLE District_Info(
Dname VARCHAR2(20) primary key,
Boundary_dist VARCHAR2(20)
);
如果您需要该表中与District具有1:1相关性的其他数据,最好将BoundayDist拆分为一个单独的表:

CREATE TABLE District_Info(
Dname VARCHAR2(20) primary key,
Boundary_dist VARCHAR2(20) primary key);
如果您确实坚持每行存储多个值,则可以使用用户定义的数据类型:

CREATE TABLE District_Info(
Dname VARCHAR2(20) primary key,
Other_info VARCHAR2(20)
);

CREATE TABLE District_Boundary(
Dname VARCHAR2(20) primary key,
Boundary_dist VARCHAR2(20) primary key);

关系数据库中常用的方法是“一个数据,一行”,“多个数据,多行”。您可能需要重新检查表结构。为什么它必须是1行1列?为什么不每行存储一个边界区?如果必须的话,您可以尝试使用嵌套表,但请先认真考虑一下。。。
create type varchar_20_list as table of varchar2(20);

CREATE TABLE District_Info(
Dname VARCHAR2(20) primary key,
Boundary_dist varchar_20_list);