For loop Teradata clob的迭代搜索

For loop Teradata clob的迭代搜索,for-loop,teradata,clob,For Loop,Teradata,Clob,我们在表中的Clob字段中存储了一个accountnumber…我们将其称为tbl_accountdetail。如果账号在另一个查询的结果中,我需要从tbl_accountdetail中提取所有记录…我们称之为sourcequery Declare @accountnumber varchar(30) Declare Err_Cursor Cursor for Select accountnumber from ErrorTable; Open Err_Cursor; Fetch nex

我们在表中的Clob字段中存储了一个accountnumber…我们将其称为tbl_accountdetail。如果账号在另一个查询的结果中,我需要从tbl_accountdetail中提取所有记录…我们称之为sourcequery

Declare @accountnumber varchar(30)

Declare Err_Cursor Cursor for 
Select accountnumber from ErrorTable; 

Open Err_Cursor;
Fetch next from Err_Cursor into @accountnumber;
While @@Fetch_status = 0
Begin
    Select * from Tbl_accountdetail where REGEXP_INSTR(CLOB,@accountnumber)>0
    Fetch next from Err_Cursor into @accountnumber
End; 

Close Err_Cursor;
Deallocate Err_Cursor;
我可以通过以下方式分别为每个帐号执行此操作:

从Tbl_accountdetail中选择*其中REGEXP_INSTRCLOB,'accountnumber'>0

当然,我的第一个想法是通过sourcequery对每个帐号进行游标和循环

Declare @accountnumber varchar(30)

Declare Err_Cursor Cursor for 
Select accountnumber from ErrorTable; 

Open Err_Cursor;
Fetch next from Err_Cursor into @accountnumber;
While @@Fetch_status = 0
Begin
    Select * from Tbl_accountdetail where REGEXP_INSTR(CLOB,@accountnumber)>0
    Fetch next from Err_Cursor into @accountnumber
End; 

Close Err_Cursor;
Deallocate Err_Cursor;
我读得越多,我就越困惑于如何以最佳/最有效的方式获得我想要的结果

对游标的引用似乎都要求将其包含在存储过程中,基于简单性,您不会认为这需要添加到sp中。对宏的引用似乎都是需要更新/插入的宏,等等,我不需要。我需要做的就是从Tbl_accountdetail返回在clob中某处有accountnumber的行

我不熟悉Teradata和CLOB。有人能帮我找到搜索clob的最佳方法吗?要为一个值列表执行此操作

非常感谢您的帮助/建议

您的CLOB数据是如何结构化的?accountnumber字段的存储方式是否可以使用可搜索模式(即accountnumber=)提取

如果要搜索多个accountnumber值,那么我认为最好的方法是从每个CLOB中提取accountnumber值,然后搜索它们。比如:

选择* 来自Tbl_accountdetail 在哪里 选择帐号 从科目表 您是对的,游标只在存储过程中使用。它们的主要目的是单独处理结果集的每一行,并执行任何附加逻辑,而这在您的案例中似乎并不需要。您可以将SQL放入宏中,也可以按原样运行它

更新 假设CLOB字段中只有一个accountnum值,格式为accountnum:123456789,则应该可以执行以下操作:

选择* 来自Tbl_accountdetail 其中,REGEXP_SUBSTRmyclob,'accountnum:\s++[0-9]+',1,1,在 选择帐号 从科目表 这应该提取CLOB字段中的第一个accountnumber匹配项,并查看in子查询中是否也存在该值

我没有TD系统可供测试,所以您可能需要稍微修改一下参数。只需用CLOB字段的名称替换myclob,并在中更新子查询。试试看,让我知道


感谢您的反馈。clob的结构类似于JSON消息,因此您可以发布一些示例数据吗?理想情况下,您可以从CLOB转换为JSON,并使用内置的JSON功能。这可能很棘手,因为LOB可能很挑剔。很抱歉,我被叫去开会,没有完成回复。由于大小的原因,DBA未能将其转换为JSON。但是,如果您需要解析clob以提取某些数据,您会喜欢任何建议:示例数据如下:accountnum:123456789、AcctSeriesID:00、fileName:Samplefilename.txt,或者关于宏如何完成任务的建议。此clob中存储了多少帐号,是否存在已知的最大值?