Calling COBOL/DB2 subprog from COBOL mainprog returns a CEE3204S error from compile unit of subprog - db2

I'm trying to call a COBOL/DB2 subprog from COBOL mainprog. But when run, it returns this error:
CEE3204S The system detected a protection exception (System Completion Code=0C4).
From compile unit ABCDBQUE...
Here's how I called the subprog from mainprog:
01 WS-HOST-VARIABLES.
05 WS-ACCT-NO.
10 WS-REGN-CODE PIC X(04).
10 WS-BRANCH-CODE PIC X(04).
10 WS-ACCOUNT-NO PIC X(08).
05 WS-HOST-ACCT-NO PIC X(16).
05 WS-ACCT-STATUS.
10 WS-DORMANT-STATUS PIC X(03) VALUE '002'.
10 WS-CLOSED-STATUS PIC X(03) VALUE '004'.
01 WS-DB-QUERY PIC X(20).
01 WS-DB-QUERY-STATUS PIC X(01).
88 DB-QUERY-SUCCEEDED VALUE 'S'.
88 DB-QUERY-FAILED VALUE 'F'.
..........
01 WS-PRT-LINE3.
05 FILLER PIC X(10) VALUE ' REGION: '.
05 WS-PRT-REGION-NAME PIC X(70).
01 WS-PRT-LINE4.
05 FILLER PIC X(10) VALUE ' BRANCH: '.
05 WS-PRT-BRANCH-NAME PIC X(70).
..........
0810-GET-REGION-AND-BRANCH.
MOVE 'GET REGION BRANCH' TO WS-DB-QUERY
CALL 'ABCDBQUE' USING WS-DB-QUERY
WS-DB-QUERY-STATUS
WS-REGN-CODE
WS-BRANCH-CODE
WS-ACCOUNT-NO
WS-PRT-REGION-NAME
WS-PRT-BRANCH-NAME.
EVALUATE TRUE
WHEN DB-QUERY-SUCCEEDED
DISPLAY 'GET REGION BRANCH SUCCEEDED'
WHEN DB-QUERY-FAILED
DISPLAY 'GET REGION BRANCH FAILED'
END-EVALUATE.
Here's what my subprog looks like:
WORKING-STORAGE SECTION.
............
*
LINKAGE SECTION.
01 LS-DB-QUERY PIC X(20).
88 DB-SELECT-ACCT VALUE 'INQUIRE DEPTABLE'.
88 DB-SELECT-REG-BRANCH VALUE 'GET REGION BRANCH'.
88 DB-UPDATE VALUE 'ACCT STATUS UPDATE'.
01 LS-DB-QUERY-STATUS PIC X(01).
88 DB-QUERY-SUCCEEDED VALUE 'S'.
88 DB-QUERY-FAILED VALUE 'F'.
01 LS-ACCT-NO.
05 LS-REGN-CODE PIC X(04).
05 LS-BRANCH-CODE PIC X(04).
05 LS-ACCOUNT-NO PIC X(08).
01 LS-PRT-REGION-NAME PIC X(70).
01 LS-PRT-BRANCH-NAME PIC X(70).
*
PROCEDURE DIVISION USING LS-DB-QUERY,
LS-DB-QUERY-STATUS,
LS-ACCT-NO,
LS-PRT-REGION-NAME,
LS-PRT-BRANCH-NAME.
..........
Return code from compiling both programs are all 0. When I didn't separate the subprog from mainprog, it works successfully. But fails when I started to add this Static Calling feature.

On the CALL you are passing 7 parameters, but you are only USING 5 - that won't work. The parameter-lists in the calling and called program must be exact matches.

Related

What is the effect of "#ignoredot#=true" in the dev.properties file?

The following is what is in the eclipse\workspace\.metadata\.plugins\org.eclipse.pde.core\Eclipse Application\dev.properties file:
#
#Mon Dec 05 21:33:21 CST 2022
a=bin
a;1.0.0.qualifier=bin
#ignoredot#=true
What is the effect of #ignoredot#=true ?

How swift know value of memory is address or actual value that I assigned

struct ValueType {
var member: Int
}
class ReferenceType {
var member: Int
init(member: Int) {
self.member = member
}
}
var valueTypeObject = ValueType(member: 3)
var referenceTypeObject = ReferenceType(member: 4)
withUnsafePointer(to: &referenceTypeObject) {
print("referenceTypeObject address: \($0)")
}
withUnsafePointer(to: &valueTypeObject) {
print("valueTypeObject address: \($0)")
}
When executing the above code, the address of each object appears like this.
valueTypeObject address: 0x0000000100008218
referenceTypeObject address: 0x0000000100008220
First, if I view memory of valueTypeObject address (0x0000000100008218), I can check the 03 value within 64 bits that I actually allocated (03 00 00 00 00 00 00 00 00 00 00 00 00 00. Maybe data is stored as little endian.)
Next, if I view memory of referenceTypeObject address (0x0000000100008220), I can check 0x000000010172f8b0 is stored in 64bit. (I don't know why right side of ..r..... is also highlighted, and what it is 🤔)
I know that the referenceTypeObject is reference type, so the actual value is in the heap area. So I can guess 0x000000010172f8b0 is an address that stores the actual value that I assigned (in this case, 4.)
But how does Swift know that this is the address that points to heap area instead of 0x000000010172f8b0 value that can be assied by me?
In addition, if I view memory of address 0x000000010172f8b0 where the actual value is stored, there are some 32 bytes values in front of the value that I allocated (in this case, 4). What are those?

How to get the difference between two columns using Talend

I Have two excel sheets that i want to compare using talend job
First excel named Compare_Me_1
PN
STT
Designation
AY73101000
20
RC0402FR-0743K2L
AY73101000
22
RK73H1ETTP4322F
AY73101000
22
ERJ-2RKF4322X
Ac2566
70
CRCW040243K2FKED
Second excel named Compare_Me_2
PN
STT
Designation
AY73101000
20
RC0402FR-0743K2L
AY73101000
22
RK73H1ETTP4322F
AY73101000
21
ERJ-2RKF4322X
Ac2566
70
CRCW040243K2FKED
what i want to achieve is this output
PN1
STT1
STT2
STT_OK_Ko
Designation1
Designation2
Designation_Ok_Ko
AY73101000
20
20
ok
RC0402FR-0743K2L
RC0402FR-0743K2L
ok
AY73101000
22
22
ok
RK73H1ETTP4322F
RK73H1ETTP4322F
ok
AY73101000
22
21
ko
ERJ-2RKF4322X
ERJ-2RKF4322X
ok
Ac2566
70
70
ok
CRCW040243K2FKED
CRCW040243K2FKED
ok
So to achieve this i developed a talend job that looks like below :
In My tMap i linked PN with a leftouterjoin and All Matches correspandance .
And to get for example STT_Ok_KO i used bellow code to compare my two input :
(!Relational.ISNULL(row14.STT) && !Relational.ISNULL(row13.STT) &&
row14.STT.equals(row13.STT) ) ||
(Relational.ISNULL(row14.STT) && Relational.ISNULL(row13.STT))
?"ok":"ko"
Is this the correct way to achieve my ouput ? If not , recommand me to use an other method
Any suggest is welcome .
You probably need to follow the long steps below :

Change date format 08 / 03 / 2017 to 08 March 2017

I'm trying to change date format from 08/03/2017
08 day
03 Month
2017 year
I I'm using
date("d F Y", strtotime($date));
the problem is that I Get 03 August 2017 instead of 08 March 2017
PS : I can't use any other then
dd/mm/yyyy
Try this
$date = DateTime::createFromFormat('d/m/Y', "08/03/2017");
echo $date->format('d F Y');
You can check it to http://php.net/manual/en/datetime.createfromformat.php
After Some researchs I found a solution
str_replace(' / ', '-',$date)
/*
You got August because you provide wrong format to this function. Function accept m/d/y and you provide d/m/y. you can try with this format m/d/y
or
you can try this with DateTime object.
*/
$date = "08/03/2017";
$dateObject = DateTime::createFromFormat('d/m/Y', $date);
echo $dateObject->format('d M Y');

Windows debugging - WinDbg

I got the following error while debuggging a process with its core dump.
0:000> !lmi test.exe
Loaded Module Info: [test.exe]
Module: test
Base Address: 00400000
Image Name: test.exe
Machine Type: 332 (I386)
Time Stamp: 4a3a38ec Thu Jun 18 07:54:04 2009
Size: 27000
CheckSum: 54c30
Characteristics: 10f
Debug Data Dirs: Type Size VA Pointer
MISC 110, 0, 21000 [Debug data not mapped]
FPO 50, 0, 21110 [Debug data not mapped]
CODEVIEW 31820, 0, 21160 [Debug data not mapped] - Can't validate symbols, if present.
Image Type: FILE - Image read successfully from debugger.
test.exe
Symbol Type: CV - Symbols loaded successfully from image path.
Load Report: cv symbols & lines
Does any body know what the error CODEVIEW 31820, 0, 21160 [Debug data not mapped] - Can't validate symbols, if present. really mean?
Is this error meant that i can't read public/private symbols from the executable?
If it is not so, why does the WinDbg debugger throws this typr of error?
Thanks in advance,
Santhosh.
Debug data not mapped can mean the section of the executable that holds the debug information hasn't been mapped into memory. If this is a crash dump, your options are limited, but if it's a live debug session. you can use the WinDbg .pagein command to retrieve the data. To do that you need to know the address to page in. If you use the !dh command on the module start address (which you can see with lm - in my case, lm mmsvcr90 for msvcr90.dll), you may see something like this (scrolling down a ways):
Debug Directories(1)
Type Size Address Pointer
cv 29 217d0 20bd0 Can't read debug data cb=0
This shows you that the debug data is at offset 217d0 from the module start and is length 29. If you attempt to dump those bytes you'll see (78520000 is the module's start address):
kd> db 78520000+217d0 l29
785417d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?????????
If you execute .pagein /p 82218b90 785417d0, then F5, when the debugger breaks back in you'll see (82218b90 is the _EPROCESS address of the process that I'm debugging):
kd> db 78520000+217d0 l29
785417d0 52 53 44 53 3f d4 6e 7a-e8 62 44 48 b2 54 ec 49 RSDS?.nz.bDH.T.I
785417e0 ae f1 07 8c 01 00 00 00-6d 73 76 63 72 39 30 2e ........msvcr90.
785417f0 69 33 38 36 2e 70 64 62-00 i386.pdb.
Now executing .reload /f msvcr90.dll will load the symbols. For a crash dump, if you can find the 0x29 bytes you're missing (from another dump maybe), you may be able to insert them and get the symbols loaded that way.
Have you set your symbol path for WinDbg (see Step 2 # http://blogs.msdn.com/iliast/archive/2006/12/10/windbg-tutorials.aspx) and are your PDB files in the symbol path?
I assume you're testing an executable built in debug mode which generates the necessary PDB files.