Page 1 of 1

Exception raised in GCI subroutine

Posted: Mon Nov 14, 2005 5:46 pm
by gradkarthik
Hi,
One of my jobs which reads data from a sql server table and writes to a flat file is aborting. I am using MSOLEDB stage to read the data.
The error given in the log file is

Code: Select all

DataStage Job 1372 Phantom 2524
Program "DSP.Open": Line 122, Exception raised in GCI subroutine:
Access violation.
Attempting to Cleanup after ABORT raised in stage CopyOfCopyOfagtmonitor1..MS_OLEDB_18
DataStage Phantom Aborting with @ABORT.CODE = 3
I checked the RT_BP1372 folder and the file within it and line no 122 is

Code: Select all

* Pin%%V50S0P2.REJECTED <= TEMP1.REJECTED
The job design is

MSOLEDB------in-------->XRF-------TEMP1-------->FlatFile

in and TEMP1 are the input and output links respectively.
Is the error occuring becos of no provision for rows rejected by transformer. how to see whats in V50S0P2 location. Any help will be appreciated.
TIA
gradkarthik

Re: Exception raised in GCI subroutine

Posted: Mon Nov 14, 2005 6:40 pm
by Raghumreddy
Check the user id and password that you are working with.
It look like Access Violation.

Please check with the DBA

HTH
Thanks
Raghu

Posted: Tue Nov 15, 2005 2:42 am
by ArndW
gradkarthik,

the line number displayed is not the exact line number of the error message; you need to offset this by up to a couple of lines (this is due to the way the compiler works and has been a problem for years...). The line you listed is a comment, just look downwards to a line that issues an external call to find the appropriate error location.

Can you do a view data in the designer on this? As the previous poster mentioned, it might be as simple as an invalid userid/password or other configuration error.

The "access violation" is not a database or OS message, it states that the program has attempted to change a memory location that is read-only. This usually occurs when a pointer (to a variable) isn't set. Often it is the result of bad programming, but in cases like this it means that some variable hasn't been initialized or returned correctly.

Posted: Tue Nov 15, 2005 2:55 am
by lax
Hi,

we also encountered this error. As arndw has said, it is due to incorrect setting of the variables.

Set array size equal to 1 and also check for the unique constraint violation .

Hope this helps

lax

Posted: Tue Nov 15, 2005 10:02 am
by gradkarthik
Hi guys,
I checked the user id and password and tried running the job by hardcoding the values rather than using parameters. It still failed. The funny part is when I replace the MSOLEDB stage with the ODBC stage, the job runs fine without a hitch. So can rule out the incorrect user name or password problem.
Its only when the job contains the MSOLEDB stage that it fails.
I tried running the same job in different test projects and in one of the project, the line no 122 (which is always the same) was as follows:

Code: Select all

$INCLUDE DSINCLUDE DSD_RTCONFIG.H
Is the job not able to create the RTCONFIG file or is the problem something totally different.
Thanks for your responses.
gradkarthik

Posted: Tue Nov 15, 2005 10:28 am
by ArndW
The program that is failing at line 122 is DSP.OPEN (I wasn't paying attention to your first post...); at line 122 it issues call to the globally catalogued routine "$DSP.Open"; so the line number doesn't help much further.

Are you able to get any MSOLEDB stage to work on your system?

Posted: Tue Nov 15, 2005 11:30 am
by gradkarthik
Hi ArndW,
Thanks for you reply. I have other jobs which have MSOLEDB stages in them and they run fine. Its just this new job that i am developing that is failing.
gradkarthik

Posted: Tue Nov 15, 2005 11:42 am
by gradkarthik
Hi guys,
I solved the problem. I had unknowingly left the field where you specify the table names in MSOLEDB stage blank. I was using a user defined sql query but the MSOLEDB stage still requires something to be present in the table name(s) field for the job to run successfully.
Its wierd because i use some other stages like Informix CLI and it allows the table field to be blank if using user defined sql. So i had just assumed that MSOLEDB was no different.
I ran my jobs again with MSOLEDB stage but this time i just entered some random value in the Table field (eg. abc) and the jobs run fine.
I don't know if this is a bug with MSOLEDB stage or it was meant to behave this way.
Thanks guys. :D
gradkarthik

Posted: Tue Nov 15, 2005 9:49 pm
by loveojha2
I had unknowingly left the field where you specify the table names in MSOLEDB stage blank. I was using a user defined sql query but the MSOLEDB stage still requires something to be present in the table name(s) field for the job to run successfully.
Its wierd because i use some other stages like Informix CLI and it allows the table field to be blank if using user defined sql. So i had just assumed that MSOLEDB was no different.
I have a question, when we use a user defined sql query, we need to provide the table name also (not sure its true with all the db stages or not), for what purpose DataStage uses it, may be it allocates the buffer for the rows under that name in the memory. :?

Posted: Tue Nov 15, 2005 10:57 pm
by ray.wurlod
I think it uses the table name to validate the columns in your design when the connection to the database is established but before the request to prepare the SQL is issued.

Posted: Wed Nov 16, 2005 10:11 am
by gradkarthik
Hi

I dont think it validates the columns because I just entered "abc" in the Table name(s) field and still the job ran without any problem. Its probably uses the value in that field to allocate buffer memory or its just the way MSOLEDB was supposed to work.:-)

gradkarthik