问题描述
嗨,
我的每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是基于作为描述字段的一部分存在的内容进行填充的。
我的每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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




