For loop Teradata clob的迭代搜索
我们在表中的Clob字段中存储了一个accountnumber…我们将其称为tbl_accountdetail。如果账号在另一个查询的结果中,我需要从tbl_accountdetail中提取所有记录…我们称之为sourcequeryFor 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
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中存储了多少帐号,是否存在已知的最大值?