Consultor Eletrônico



Kbase P125505: CAN-FIND query causes memory violation when running against Oracle DataServer on Solaris
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   2/29/2008
Status: Unverified

FACT(s) (Environment):

OpenEdge 10.1B
Oracle DataServer
Sun Solaris SPARC
Oracle 10g

SYMPTOM(s):

Connecting to Oracle 10 database via Oracle DataServer

ABL query using CAN-FIND causes session crash with error 49

SYSTEM ERROR: Memory violation. (49)

Stack trace from _progres reads:

X8StmtPrepare
orgettime
oradbnxt
orafnd

ABL query is constructed in a manner similar to the following:

FOR EACH <Table1> NO-LOCK:
MESSAGE CAN-FIND(FIRST <Table2> WHERE <Table2>.<Field1> = 1)
VIEW-AS ALERT-BOX.
END.
RETURN.

Dataserv.lg (with -Dsrv qt_debug,EXTENDED set) shows:

HH:MM:SS : OCI call OCIStmtExecute <5>
HH:MM:SS : error text: ORA-01008: not all variables bound ----
HH:MM:SS : OCI call omru <5>
HH:MM:SS :
HH:MM:SS : Cursor <5> Rows processed 0 (last execution)
HH:MM:SS : SYSTEM ERROR: Memory violation. (49)
HH:MM:SS : ** Save file named core for analysis by Progress Software Corporation. (439)

CAUSE:

Bug# OE00156304

FIX:

Option #1
Upgrade to 10.1C or later

Option #2
Change WHERE condition on the CAN-FIND function as follows:

FOR EACH <Table1> NO-LOCK:
MESSAGE CAN-FIND(FIRST <Table2> WHERE <Table2>.<Field1> >= 1 AND <Table2>.<Field1> <= 1)
VIEW-AS ALERT-BOX.
END.
RETURN.