首页 > 解决方案 > 是否有可能将单元格数据拆分为 Oracle 中的多个列

问题描述

我的表中有一个 clob 列,其数据如下所示

Name: ABC
Place: XYZ
Age: 123
Role: Developer
Skill: SQL

表 emp 中有数百条记录,其中每个 emp_id 都会有一个列和上面的描述。现在我想将此数据显示为 emp id 的每一列。像这样的东西

select emp_id, name, place, age, role, skill from emp where emp_id=xx;

这可以使用reg exp吗?或任何其他方式?请建议。

标签: sqlregexoracleplsqlsplit

解决方案


是的,可以在 CLOB 列上使用 REGEXP_SUBSTR:

OPS$ORACLE@FTEX>desc emp;
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 EMP_ID                                                                     NUMBER
 X                                                                          CLOB

OPS$ORACLE@FTEX>select * from emp;

    EMP_ID X
---------- --------------------------------------------------------------------------------
         1 Name: ABC Place: XYZ Age: 123 Role: Developer Skill: SQL

OPS$ORACLE@FTEX>create or replace view v_emp as
  2  (
  3  select emp_id,
  4         regexp_substr(x, '(\S*)(\:)(\s)(\S*)', 1, 1, null, 4) as Name,
  5         regexp_substr(x, '(\S*)(\:)(\s)(\S*)', 1, 2, null, 4) as Place,
  6         regexp_substr(x, '(\S*)(\:)(\s)(\S*)', 1, 3, null, 4) as Age,
  7         regexp_substr(x, '(\S*)(\:)(\s)(\S*)', 1, 4, null, 4) as Role,
  8         regexp_substr(x, '(\S*)(\:)(\s)(\S*)', 1, 5, null, 4) as Skill
  9         from emp
 10  );

View created.

OPS$ORACLE@FTEX>select * from v_emp;

    EMP_ID NAME                 PLACE                AGE   ROLE                 SKILL
---------- -------------------- -------------------- ----- -------------------- --------------------
         1 ABC                  XYZ                  123   Developer            SQL

OPS$ORACLE@FTEX>

推荐阅读