【发布时间】:2019-10-30 23:59:38
【问题描述】:
假设我有 field_name-field_len 对的键值表。
如下:
-----------------------------------
field_name | field_len |
-----------------------------------
FIELD_A | 10 |
-----------------------------------
FIELD_B | 20 |
-----------------------------------
...
-----------------------------------
FIELD_X | 2 |
-----------------------------------
FIELD_Y | 100 |
-----------------------------------
然后我需要将每个字段的偏移量放在第三列中。 像这样:
-----------------------------------------------------
field_name | field_len | offset |
-----------------------------------------------------
FIELD_A | 10 | 0 |
-----------------------------------------------------
FIELD_B | 20 | 10 |
-----------------------------------------------------
...
-----------------------------------------------------
FIELD_X | 2 | 250 |
-----------------------------------------------------
FIELD_Y | 100 | 252 |
-----------------------------------------------------
with offsets (column_name, length, offset) as
((select column_name, length, CAST(0 AS SMALLINT)
from myschema.sizes a
start with rrn(a) = 1)
union all
(select b.column_name, b.length, offset + o.length
from offsets o, myschema.sizes b
where rrn(b) between 2 and 100))
select * from offsets;
但是,它不断进入无限循环。
这个版本也给出了相同的结果:
with offsets (column_name, length, offset) as
((select column_name, length, CAST(0 AS SMALLINT)
from myschema.sizes a
fetch first row only)
union all
(select b.column_name, b.length, offset + o.length
from offsets o join myschema.sizes b on b.column_name = o.column_name
where o.column_name <>'LAST_FIELD'))
select * from offsets;
我猜,这在退出条件的某个地方搞砸了,但无法确定修复它的确切位置。
最好避免任何特定于表的元数据,如行数。
【问题讨论】: