我们有一个帐号存储在表的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的新手。有人可以帮助我寻找最好的方法吗?并为此获取值列表?
非常感谢任何帮助/建议。
您是正确的,游标仅在存储过程中使用。它们的主要目的是分别处理结果集的每一行并执行任何其他逻辑,在您的情况下您似乎不需要。您可以将SQL
放入宏中,也可以直接运行。
如果您要搜索多个accountnumber
值,那么我认为最好的方法是从每个accountnumber
中提取CLOB
值,然后对其进行搜索。类似于:
SELECT *
FROM Tbl_accountdetail
WHERE <extracted_accountnumber> IN (
SELECT account_number
FROM account_table
)
CLOB
数据的结构如何? accountnumber
字段是否以您可以使用可搜索模式(即accountnumber=<10-digit-#>
)提取的方式存储?