暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 解析带有255字符的长字符并剥离单词

ASKTOM 2019-02-06
281

问题描述

嗨,

我的每10,000行都有一个长字符字段,我需要编写一个PL/SQL,它遍历每一行。为任何单词 (字母和数字的混合) 解析这个长字段,最多6个字符,并将其吐出并保存到同一个不同的列那一行的表。请看下面的例子。

长字符,(解释字段)

ORIG CO名称 = SEA14-1730分钟,ORIG ID = 9352818303,DESC日期 = INDOFF,ENTRY DESCR = 付款,ENTRY CLASS = CCD,TRACE NO = 021000026215345,ENTRY DATE = 181226,IND ID NO = EFT-00414033,IND NAME = EFT-00414033,公司数据 = 181224 WWK2JV I,备注 = EFT/ACH为ORIGIN # 创建的偏移量: 9303220000 CO EFF日期: 18/12/26

表: 制造 _ 帐户
ACCOUNT # ACCOUNT NAME EXPLANATION FIELD ORIG ID ENTRY DESCR DESC DATE
11111 SEA14长场9352828303付款INDOFF

所以上面的例子显示了剥离和保存需要如何工作。

非常感谢!

好的,重新开始。完全忽略上面的内容。

我包括样本表和一些行插入。我正在尝试编写经过每一行的PL/SQL,并从描述中获取数据,并使用每个studentid的必要数据更新tbl_students列。因此,课程、标题和课程id是基于作为描述字段的一部分存在的内容进行填充的。

CREATE TABLE  tbl_Students (
    Studentid number NOT NULL,
    Firstname varchar2(200) ,
    Lastname varchar2(200) ,
    description varchar2(400),
    course varchar2(12),
    title varchar2(12),
    course_id numeric
);

Insert into tbl_Students (Studentid,Firstname, lastname, description)
 Values(1111,'Vivek', 'Johari', 'course=SEA14 - 1730 Min,title=9352818303,course_id=1212');

Insert into tbl_Students (Studentid,Firstname, lastname, description)
 Values(1112,'Pankaj', 'Kumar', 'course=SEA15 - 1731 Min,title=6552818303,course_id=1213');

Insert into tbl_Students (Studentid,Firstname, lastname, description)
 Values(1113,'Amit', 'Singh', 'course=SEA14 - 1732 Min,title=4352818303,course_id=1214');
commit;

专家解答

您需要使用某种形式的substr来提取相关值。如果你觉得勇敢,你可以使用正则表达式:

select substr ( regexp_substr ( description, 'course=([^,]*)'), 8 ) course,
       substr ( regexp_substr ( description, 'title=([^,]*)'), 7 ) title,
       substr ( regexp_substr ( description, 'course_id=(.*)'), 11 ) course_id
from   tbl_Students;

COURSE             TITLE        COURSE_ID   
SEA14 - 1730 Min   9352818303   1212        
SEA15 - 1731 Min   6552818303   1213        
SEA14 - 1732 Min   4352818303   1214 


然后更新相关列。

尽管您需要调整课程的逻辑-该字段不适合您的列限制:

update tbl_Students
set    course    = substr ( regexp_substr ( description, 'course=([^,]*)'), 8 ),
       title     = substr ( regexp_substr ( description, 'title=([^,]*)'), 7 ),
       course_id = substr ( regexp_substr ( description, 'course_id=(.*)'), 11 );

ORA-12899: value too large for column "CHRIS"."TBL_STUDENTS"."COURSE" (actual: 16, maximum: 12)

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论