Teradata Clob的迭代搜索

问题描述 投票:0回答:1

我们有一个帐号存储在表的Clob字段中...我们将其称为tbl_accountdetail。如果帐号在另一个查询的结果中,我需要从tbl_accountdetail中撤回所有记录...我们将其称为sourcequery。

我可以使用以下方法分别为每个帐号执行此操作:

Select * from Tbl_accountdetail where REGEXP_INSTR(CLOB,'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中。

我是Teradata和Clob的新手。有人可以帮助我寻找最好的方法吗?并为此获取值列表?

非常感谢任何帮助/建议。

for-loop teradata clob
1个回答
0
投票

您是正确的,游标仅在存储过程中使用。它们的主要目的是分别处理结果集的每一行并执行任何其他逻辑,在您的情况下您似乎不需要。您可以将SQL放入宏中,也可以直接运行。

如果您要搜索多个accountnumber值,那么我认为最好的方法是从每个accountnumber中提取CLOB值,然后对其进行搜索。类似于:

SELECT * 
FROM Tbl_accountdetail 
WHERE <extracted_accountnumber> IN (
  SELECT account_number
  FROM account_table
)

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

© www.soinside.com 2019 - 2024. All rights reserved.