View previous topic :: View next topic
Author
Message
aagarwal88 New User Joined: 02 Oct 2018Posts: 2 Location: India
I am trying to insert multiple rows in a single insert query using host variable array in my application program IV2XVAL to improve the performance of my insert program. I am getting SQLCODE -310 in the insert query whereas I have checked that we are not passing any non-numeric data to decimal field.
When I looked for a resolution on google, I got a reference to www-01.ibm.com/support/docview.wss?uid=swg1PM21877 . It looks like it might not be due to application program and something to do with DB2 itself. Can you please have a look and help me out if possible.
Insert Query
Code:
INSERT INTO VLXFS
(COMPANY_CODE ,
MASTER_ID ,
VALUATION_DATE ,
VALUATION_START_DATE ,
SEQUENCE_NUMBER ,
ENTRY_NUMBER ,
FUND_NUMBER ,
FUND_TYPE_INDICATOR ,
FUND_DOLLARS ,
FUND_UNIT_VALUE ,
FUND_VARIABLE_VALUE ,
FUND_GUAR_VALUE ,
FUND_EQTY_BASED_VALUE ,
FUND_PNT_TO_PNT_VALUE ,
FUND_ASIAN_VALUE ,
FUND_LOCK_IN_VALUE ,
FUND_LOOKBACK_VALUE ,
FUND_SURR_VALUE ,
FUND_FACTOR_VALUE ,
FUND_INTEREST ,
PRE_TEFRA_DOLLARS ,
PRE_TEFRA_VARIABLE_VALUE ,
PRE_TEFRA_GUAR_VALUE ,
PRE_TEFRA_INTEREST ,
POST_TEFRA_DOLLARS ,
POST_TEFRA_VARIABLE_VALUE ,
POST_TEFRA_GUAR_VALUE ,
POST_TEFRA_INTEREST ,
PV_FUND_CLASS)
VALUES ( :VLXFS-TABLE-ARRAY)
FOR :SUB7 ROWS
END-EXEC.
Where VLXFS-TABLE-ARRAY is defined as
Code:
01 VALUE11-FUND-ARRAY.
05 VLXFS-TABLE-ARRAY OCCURS 999.
10 COMPANY-CODE PIC X(3).
10 MASTER-ID PIC X(15).
10 VALUATION-DATE PIC X(8).
10 VALUATION-START-DATE PIC X(8).
10 SEQUENCE-NUMBER PIC S9(4)V COMP-3.
10 ENTRY-NUMBER PIC S9(8) COMP-3.
10 FUND-NUMBER PIC S9(8) COMP-3.
10 FUND-TYPE-INDICATOR PIC X.
10 FUND-DOLLARS PIC S9(9)V99 COMP-3.
10 FUND-UNIT-VALUE PIC S999V9(6) COMP-3.
10 FUND-VARIABLE-VALUE PIC S9(9)V99 COMP-3.
10 FUND-GUAR-VALUE PIC S9(9)V99 COMP-3.
10 FUND-EQTY-BASED-VALUE PIC S9(9)V99 COMP-3.
10 FUND-PNT-TO-PNT-VALUE PIC S9(9)V99 COMP-3.
10 FUND-ASIAN-VALUE PIC S9(9)V99 COMP-3.
10 FUND-LOCK-IN-VALUE PIC S9(9)V99 COMP-3.
10 FUND-LOOKBACK-VALUE PIC S9(9)V99 COMP-3.
10 FUND-SURR-VALUE PIC S9(9)V99 COMP-3.
10 FUND-FACTOR-VALUE PIC S9(9)V99 COMP-3.
10 FUND-INTEREST PIC S9(9)V99 COMP-3.
10 PRE-TEFRA-DOLLARS PIC S9(9)V99 COMP-3.
10 PRE-TEFRA-VARIABLE-VALUE PIC S9(9)V99 COMP-3.
10 PRE-TEFRA-GUAR-VALUE PIC S9(9)V99 COMP-3.
10 PRE-TEFRA-INTEREST PIC S9(9)V99 COMP-3.
10 POST-TEFRA-DOLLARS PIC S9(9)V99 COMP-3.
10 POST-TEFRA-VARIABLE-VALUE PIC S9(9)V99 COMP-3.
10 POST-TEFRA-GUAR-VALUE PIC S9(9)V99 COMP-3.
10 POST-TEFRA-INTEREST PIC S9(9)V99 COMP-3.
10 PV-FUND-CLASS PIC X.
I am getting SQLCODE -310 as below
SQLCODE -310
Decimal host variable or parameter 5 contains non-decimal data
I have checked all the parameters to insert query and there is no non-numeric data being moved to numeric field. Below is the snapshot from abend-aid with the values being passed to the failing insert query.
Field Type Values
----- ---- ------------
:VLXFS-TABLE-ARRAY.COMPANY-CODE CHAR(3) Below
16874B88 CHAR EQC
ZONE CDC
DIGIT 583
1..
:VLXFS-TABLE-ARRAY.MASTER-ID CHAR(15) Below
16874B8B CHAR 308601648
ZONE 444444FFFFFFFFF
DIGIT 000000308601648
1...5...10....*
:VLXFS-TABLE-ARRAY.VALUATION-DATE CHAR(8) Below
16874B9A CHAR 20180927
ZONE FFFFFFFF
DIGIT 20180927
1...5...
:VLXFS-TABLE-ARRAY.VALUATION-STAR CHAR(8) Below
A B E N D - A I D PAGE 776
T-DATE
16874BA2 CHAR 20180927
ZONE FFFFFFFF
DIGIT 20180927
1...5...
:VLXFS-TABLE-ARRAY.SEQUENCE-NUMBE DECIMAL(4,0) 1 Parameter 5 has valid data
R
:VLXFS-TABLE-ARRAY.ENTRY-NUMBER DECIMAL(8,0) 1
:VLXFS-TABLE-ARRAY.FUND-NUMBER DECIMAL(8,0) 1,676
:VLXFS-TABLE-ARRAY.FUND-TYPE-INDI CHAR(1) Below
CATOR
16874BB7 CHAR V
ZONE E
DIGIT 5
1
:VLXFS-TABLE-ARRAY.FUND-DOLLARS DECIMAL(11,2) 0.00
:VLXFS-TABLE-ARRAY.FUND-UNIT-VALU DECIMAL(9,6) 10.421485
E
:VLXFS-TABLE-ARRAY.FUND-VARIABLE- DECIMAL(11,2) 0.00
VALUE
:VLXFS-TABLE-ARRAY.FUND-GUAR-VALU DECIMAL(11,2) 0.00
E
:VLXFS-TABLE-ARRAY.FUND-EQTY-BASE DECIMAL(11,2) 0.00
D-VALUE
:VLXFS-TABLE-ARRAY.FUND-PNT-TO-PN DECIMAL(11,2) 0.00
T-VALUE
:VLXFS-TABLE-ARRAY.FUND-ASIAN-VAL DECIMAL(11,2) 0.00
UE
:VLXFS-TABLE-ARRAY.FUND-LOCK-IN-V DECIMAL(11,2) 0.00
ALUE
:VLXFS-TABLE-ARRAY.FUND-LOOKBACK- DECIMAL(11,2) 0.00
VALUE
:VLXFS-TABLE-ARRAY.FUND-SURR-VALU DECIMAL(11,2) 0.00
E
:VLXFS-TABLE-ARRAY.FUND-FACTOR-VA DECIMAL(11,2) 0.00
LUE
:VLXFS-TABLE-ARRAY.FUND-INTEREST DECIMAL(11,2) 0.00
:VLXFS-TABLE-ARRAY.PRE-TEFRA-DOLL DECIMAL(11,2) 0.00
ARS
A B E N D - A I D PAGE 777
:VLXFS-TABLE-ARRAY.PRE-TEFRA-VARI DECIMAL(11,2) 0.00
ABLE-VALUE
:VLXFS-TABLE-ARRAY.PRE-TEFRA-GUAR DECIMAL(11,2) 0.00
-VALUE
:VLXFS-TABLE-ARRAY.PRE-TEFRA-INTE DECIMAL(11,2) 0.00
REST
:VLXFS-TABLE-ARRAY.POST-TEFRA-DOL DECIMAL(11,2) 0.00
LARS
:VLXFS-TABLE-ARRAY.POST-TEFRA-VAR DECIMAL(11,2) 0.00
IABLE-VALUE
:VLXFS-TABLE-ARRAY.POST-TEFRA-GUA DECIMAL(11,2) 0.00
R-VALUE
:VLXFS-TABLE-ARRAY.POST-TEFRA-INT DECIMAL(11,2) 0.00
EREST
:VLXFS-TABLE-ARRAY.PV-FUND-CLASS CHAR(1) Below
16874C2F CHAR
ZONE 4
DIGIT 0
1
Back to top
expat Global Moderator Joined: 14 Mar 2007Posts: 8797 Location: Welsh Wales
Learn to use the code tags - I'm getting fed up doing it for others
Code:
[code]
Your
stuff
goes
here
[/code]
Back to top
Marso REXX Moderator Joined: 13 Mar 2006Posts: 1353 Location: Israel
Shouldn't it be:
Code:
01 VALUE11-FUND-ARRAY.
05 COMPANY-CODE PIC X(3) OCCURS 999.
05 MASTER-ID PIC X(15) OCCURS 999.
05 VALUATION-DATE PIC X(8) OCCURS 999.
05 VALUATION-START-DATE PIC X(8) OCCURS 999.
05 SEQUENCE-NUMBER PIC S9(4)V COMP-3 OCCURS 999.
and so on... ?
Back to top
Rohit Umarjikar Global Moderator Joined: 21 Sep 2010Posts: 3014 Location: NYC,USA
-310
What you posted link is from 2010-2011 and recent versions have all of them fixed for sure. So correct your SELECT query and make sure it matches up the host declarations and it has nothing to do with DB2 or system errors but the data itself. Did you check Host variable number or parameter number which is bad one in the SQLCA?
Marso, I think (not sure) when we use individual variables listed in INSERT or SELECT then occurs goes individually otherwise Group Occurs should work else TS would get different Sqlcode even before -310.
Back to top
aagarwal88 New User Joined: 02 Oct 2018Posts: 2 Location: India
Thank you so much Marso.. It worked.. But performance didn't improved as expected for multi row insert v/s single row insert.
Code:
01 VALUE11-FUND-ARRAY.
05 COMPANY-CODE PIC X(3) OCCURS 999.
05 MASTER-ID PIC X(15) OCCURS 999.
05 VALUATION-DATE PIC X(8) OCCURS 999.
05 VALUATION-START-DATE PIC X(8) OCCURS 999.
05 SEQUENCE-NUMBER PIC S9(4)V COMP-3 OCCURS 999.
and so on...
Coded for you - do it yourself next time
Back to top
Nic Clouston Global Moderator Joined: 10 May 2007Posts: 2455 Location: Hampshire, UK
Performance may not improve as it is impacted by outside influences such as the number of other jobs accessing DB2 and other workload on the machine. You must remember that the same amount of DB activity takes place - you are simply making fewer calls to DB2.
Back to top
Marso REXX Moderator Joined: 13 Mar 2006Posts: 1353 Location: Israel
If you have a really large number of rows to insert, you may increase performance by writing them to a temporary file and then doing a LOAD RESUME.
Back to top
Please enable JavaScript!