问题:
我有一个包含 CLOB 的表,它是来自外部源的固定长度记录。其中位置 1-5 = fieldA,位置 6-12 = fieldB,等等。
我有另一个表(LayoutDefinition)定义了记录布局,其中
FieldName = 'fieldA'
FieldStart = 1
FieldLength = 5
FieldName = 'fieldB'
FieldStart = 6
FieldLength = 6
我需要从 CLOB 中检索数据并将其放入 %rowtype 变量中,例如“tableA_rec tableA%rowtype”。
我已经实现了一个使用大量 case 语句的例程,并且 LayoutDefiniton 表中每一行的循环将 CLOB 的区域移动到 tablea_rec 中的适当变量中;
CASE LayoutDefiniton.FieldName
WHEN 'fieldA' THEN tablea_rec.fieldA:= SUBSTR(inputClob,LayoutDefiniton.FieldStart,LayoutDefiniton.FieldLength);
WHEN 'fieldB' THEN tablea_rec.fieldB:= SUBSTR(inputClob,LayoutDefiniton.FieldStart,LayoutDefiniton.FieldLength);
这当然是非常低效的,因为我需要遍历我的布局,以便为每条记录挑选出我的数据。
我想做的是创建一个动态 sql select 语句,该语句将把表中的数据检索到适当的变量中。例如,如果它不是动态的,它可能看起来像;
select substr(inputCLOB,1,5), substr(inputCLOB,6,6) into FieldA, fieldB from CLOBTable;
这可以使用动态 SQL 来完成吗?
如果是这样,语法会是什么样子?