Exception raised in GCI subroutine:Access violation

Post questions here relative to DataStage Server Edition for such areas as Server job design, DS Basic, Routines, Job Sequences, etc.

Moderators: chulett, rschirm, roy

Post Reply
ray.wurlod
Participant
Posts: 54595
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

You need to search earlier in the code to find a comment that shows the exact function to which PUT.Pin%%V0S75P2 is mapped. You can figure out that this is performing a"write" operation, and through which stage type.

An access violation (attempt to access a memory address that you do not own) may be caused by many things, including trying to put too long a string into a Char field, attempting to write a null into a not null column, and so on. Or it may be a bug.
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
OFAlain
Participant
Posts: 4
Joined: Tue Dec 14, 2004 4:49 am
Location: France
Contact:

Post by OFAlain »

Here is the code of the complete JOB
In fact, it's a "write" operation with the BCP.
In entry, it's "V0S75P1" (link "Ln_Sf_Tr"), and the the target is "V0S75P2" (link "Ln_Tr_Bcp").

============================
* Tokens were replaced below as follows:
* JobParam%%1 <= G_REP_DATA
* JobParam%%2 <= L_NOM_FICH
* JobParam%%3 <= G_CCLI_DSN
* JobParam%%4 <= G_CCLI_USR
* JobParam%%5 <= G_CCLI_PWD
* JobParam%%6 <= G_CCLI_DB
* Pin%%V0S75P1.Column%%1 <= Ln_Sf_Tr.CODSOC
* Pin%%V0S75P1.Column%%2 <= Ln_Sf_Tr.CODTIT
* Pin%%V0S75P1.Column%%3 <= Ln_Sf_Tr.CODFAMREL
* Pin%%V0S75P1.Column%%4 <= Ln_Sf_Tr.LIBFAMREL
* GET.Pin%%V0S75P1 <= GET.Ln_Sf_Tr
* Pin%%V0S75P1.REJECTEDCODE <= Ln_Sf_Tr.REJECTEDCODE
* Pin%%V0S75P2.Column%%1 <= Ln_Tr_Bcp.CODSOC
* Pin%%V0S75P2.Column%%2 <= Ln_Tr_Bcp.CODTIT
* Pin%%V0S75P2.Column%%3 <= Ln_Tr_Bcp.CODFAMREL
* Pin%%V0S75P2.Column%%4 <= Ln_Tr_Bcp.LIBFAMREL
* PUT.Pin%%V0S75P2 <= PUT.Ln_Tr_Bcp
* Pin%%V0S75P2.REJECTED <= Ln_Tr_Bcp.REJECTED
* Pin%%V0S75P2.REJECTEDCODE <= Ln_Tr_Bcp.REJECTEDCODE
*
* Subroutine for active stage JdCCLIBaseClientsFamilleRelanceBcp.Tr_BaseClients generated at 16:00:45 01 Sep 2006
*
SUBROUTINE DSTransformerStage(HANDLES,ERROR)

$INCLUDE DSINCLUDE DSD_RTCONFIG.H
$INCLUDE DSINCLUDE DSD_STAGE.H
$INCLUDE DSINCLUDE DSD_BCI.H

$DEFINE JobParam%%1 STAGECOM.JOB.STATUS<7,1>
$DEFINE JobParam%%2 STAGECOM.JOB.STATUS<7,2>
$DEFINE JobParam%%3 STAGECOM.JOB.STATUS<7,3>
$DEFINE JobParam%%4 STAGECOM.JOB.STATUS<7,4>
$DEFINE JobParam%%5 STAGECOM.JOB.STATUS<7,5>
$DEFINE JobParam%%6 STAGECOM.JOB.STATUS<7,6>

$INCLUDE DSINCLUDE JOBCONTROL.H
DEFFUN DSRLoadString(Num,Text,Args) CALLING '*DataStage*DSR_LOADSTRING'
$DEFINE Pin%%V0S75P1.Column%%1 STAGECOM.ARR(1)
$DEFINE Pin%%V0S75P1.Column%%2 STAGECOM.ARR(2)
$DEFINE Pin%%V0S75P1.Column%%3 STAGECOM.ARR(3)
$DEFINE Pin%%V0S75P1.Column%%4 STAGECOM.ARR(4)
$DEFINE GET.Pin%%V0S75P1 CALL $DS.SEQGETNEXT(1,Pin%%V0S75P1.REJECTEDCODE)
IF STAGECOM.TRACE.STATS THEN CALL $PERF.NAME(-2,'Ln_Tr_Bcp.Derivation')
$DEFINE Pin%%V0S75P2.Column%%1 STAGECOM.ARR(1)
$DEFINE Pin%%V0S75P2.Column%%2 STAGECOM.ARR(2)
$DEFINE Pin%%V0S75P2.Column%%3 STAGECOM.ARR(3)
$DEFINE Pin%%V0S75P2.Column%%4 STAGECOM.ARR(4)
$DEFINE PUT.Pin%%V0S75P2 CALL $DSP.Put(2, Pin%%V0S75P2.REJECTEDCODE)

UPDATE.COUNT = STAGECOM.RATE



LOOP
REJECTED = @TRUE
* Get next row from primary input pin Ln_Sf_Tr
STAGECOM.PINNO = 1
GET.Pin%%V0S75P1
ERROR = Pin%%V0S75P1.REJECTEDCODE
WHILE NOT(ERROR)

STAGECOM.PINNO = 2
IF STAGECOM.TRACE.STATS THEN CALL $PERF.BEGIN(-2)
IF @TRUE THEN
* Column derivation code for pin Ln_Tr_Bcp
Pin%%V0S75P2.REJECTED = @FALSE
IF STAGECOM.TRACE.STATS THEN CALL $PERF.END(-2)

PUT.Pin%%V0S75P2
IF NOT(Pin%%V0S75P2.REJECTEDCODE) THEN
REJECTED = @FALSE
END ELSE
Pin%%V0S75P2.REJECTED = @TRUE
END
END
ELSE
Pin%%V0S75P2.REJECTED = @TRUE
Pin%%V0S75P2.REJECTEDCODE = 0
END


UPDATE.COUNT -= 1
IF UPDATE.COUNT LE 0 THEN CALL DSD.Update(HANDLES);UPDATE.COUNT = STAGECOM.RATE
REPEAT
RETURN
END

============================


The next operation i'll do; it's to reinstall the Server.
At first, I install the Syabse Open-client 12.5.1
Then I install the DS V7.5.2 server, and then the DS V7.5.2 client.
Post Reply