如何在microfocus cobol中更新索引文件的主键
how to update primary key of index file in microfocus cobol
我需要更新我正在顺序读取的索引记录的主键我知道我不能使用重写来做到这一点,任何建议
前5个move语句为主键。
move perdt1-pno to perat-pno
move zeros to perat-bno
move space to perat-eng-type
move space to perat-shift-code
move zeros to perat-area
start perat-file key > perat-key
invalid key
set end-of-infile to true
not invalid key
read perat-file next ignore lock
at end
continue
end-read
display "meow"
perform
varying ws-sub from 1 by 1
until ws-sub > 10
or perat-pno not = perdt1-pno
if (perat-pno = perdt1-pno)
and (in-apc <> perat-bno)
display "meow2"
display perat-pno
move in-apc to perat1-bno
move in-perat-area
to perat1-area
move in-primary-skill
to perat1-eng-type
if in-primary-skill <> spaces
move "P" to perat-primary-skill
else
move "S" to perat-primary-skill
end-if
//i cant do rewrite here.
如您所见,没有 REWRITE
主索引,因为一旦您更改 REWRITE
就不会更改以前的读取记录,而是更改具有新主索引的记录记录 - 如果它存在。
这就是 ORGANIZATION INDEXED
的工作原理。
常做的事情:
READ
旧记录(可能 WITH LOCK
)
- 如果您还没有:保存关键字段的旧值
- 将新值放在关键字段中,然后
WRITE
,最好使用 INVALID KEY
子句来捕获这种情况
- 结果是以下之一:
INVALID KEY
条件(=重复): - 你必须决定是否应该是 DELETED
(如果是,然后再次重新读取旧记录,“更新”它的关键字段和再次执行 INSERT
,否则通过手动错误消息或让运行时系统处理重复键来中止)
NOT INVALID KEY
状态 - 一切正常
- 将保存的(旧)值放在键字段中,然后
DELETE
(否则文件中的记录将同时包含旧键值和新键值)
根据您环境中的规则,您可能需要 READ
使用新密钥,因此永远不要在 WRITE
.[=25 期间进入 INVALID KEY
状态=]
我需要更新我正在顺序读取的索引记录的主键我知道我不能使用重写来做到这一点,任何建议
前5个move语句为主键。
move perdt1-pno to perat-pno
move zeros to perat-bno
move space to perat-eng-type
move space to perat-shift-code
move zeros to perat-area
start perat-file key > perat-key
invalid key
set end-of-infile to true
not invalid key
read perat-file next ignore lock
at end
continue
end-read
display "meow"
perform
varying ws-sub from 1 by 1
until ws-sub > 10
or perat-pno not = perdt1-pno
if (perat-pno = perdt1-pno)
and (in-apc <> perat-bno)
display "meow2"
display perat-pno
move in-apc to perat1-bno
move in-perat-area
to perat1-area
move in-primary-skill
to perat1-eng-type
if in-primary-skill <> spaces
move "P" to perat-primary-skill
else
move "S" to perat-primary-skill
end-if
//i cant do rewrite here.
如您所见,没有 REWRITE
主索引,因为一旦您更改 REWRITE
就不会更改以前的读取记录,而是更改具有新主索引的记录记录 - 如果它存在。
这就是 ORGANIZATION INDEXED
的工作原理。
常做的事情:
READ
旧记录(可能WITH LOCK
)- 如果您还没有:保存关键字段的旧值
- 将新值放在关键字段中,然后
WRITE
,最好使用INVALID KEY
子句来捕获这种情况 - 结果是以下之一:
INVALID KEY
条件(=重复): - 你必须决定是否应该是DELETED
(如果是,然后再次重新读取旧记录,“更新”它的关键字段和再次执行INSERT
,否则通过手动错误消息或让运行时系统处理重复键来中止)NOT INVALID KEY
状态 - 一切正常
- 将保存的(旧)值放在键字段中,然后
DELETE
(否则文件中的记录将同时包含旧键值和新键值)
根据您环境中的规则,您可能需要 READ
使用新密钥,因此永远不要在 WRITE
.[=25 期间进入 INVALID KEY
状态=]