Kbase P71257: 4GL/ABL: Error (915) doing a FIND FIRST with ROWID.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  29/12/2008 |
|
Status: Verified
SYMPTOM(s):
4GL/ABL: Error (915) doing a FIND FIRST with ROWID.
Lock table overflow, increase -L on server (915)
The error IS generated when executing a statement similar to:
FIND FIRST customer WHERE STRING(ROWID(customer)) = '0x00000071'.
UPDATE customer EXCEPT comments.
The error is NOT generated when executing a statement similar to:
FIND FIRST customer WHERE STRING(ROWID(customer)) = '0x00000071'.
DISPLAY customer EXCEPT comments.
FACT(s) (Environment):
All Supported Operating Systems
Progress 8.x
Progress 9.x
OpenEdge 10.x
CAUSE:
Using the STRING function in the WHERE clause of the FIND statement causes Progress/OpenEdge to use the primary index to sequentially access the records SHARE-LOCK till it reaches the desired one. Using the UPDATE statement causes Progress/OpenEdge to start a transaction causing all the accessed records to be held SHARE-LOCK records till the end of the transaction.
FIX:
To avoid having to read and hold in SHARE-LOCK all the records prior to the desired one , go after the record directly using the ROWID function. That is modify the WHERE clause as per the following example:
FIND FIRST customer WHERE ROWID(customer) = TO-ROWID('0x00000071').
UPDATE customer EXCEPT comments.