Re: sqlstm.sqharc What is it? And what does it do? It keeps getting corrupted on me.

From: Mark D Powell <Mark.Powell_at_eds.com>
Date: Sat, 2 Feb 2008 17:53:21 -0800 (PST)
Message-ID: <7c31ccb1-19fc-4801-ae22-eb0f9b12894e@i7g2000prf.googlegroups.com>


On Jan 31, 12:20 pm, 44d..._at_gmail.com wrote:
> This is generated by a Pro*C compiler running on an AIX box.
> It usually contains the proper data, but every once in a while, and
> only on 2 certain record types, it gets populated w/ blanks. If I
> process those record types separately, then there's no problem w/ any
> of the record types (there are 7 of them for the record).
>
> So, what is sqharc, and how does it get populated? The pre-compiler
> generated code doesn't populate it anywhere. I've searched online, but
> the only hits I get are copies of code from people asking for help w/
> problems.
> As for documentation, I haven't found any that help. I've searched
> both IBM and Oracle sites. Nada e niente.
>
> I copied the code below, but it's all generated by the pre-compiler,
> and the original is very basic - initialize the necessary fields and
> do a SELECT to return 1 row.
>
> Can anybody help?
> Regards
> Tom
>
> good value --
> populated sqpind w/ sqindv - 0
> populated sqpins w/ sqinds - 0
> populated sqparm w/ sqharm - 0
> getting sqharc - 9001000a0059bf0
> populated sqparc w/ sqharc - 9001000a0059bf0
>
> bad value --
> populated sqpind w/ sqindv - 0
> populated sqpins w/ sqinds - 0
> populated sqparm w/ sqharm - 0
> getting sqharc - 2020202020202020
> populated sqparc w/ sqharc - 2020202020202020
>
> Here's the original code, the generated code is below --
>          init();
>
>          sprintf(tmpSeqno, "%06d", numSeqno);
>          strncpy(tmpConnectionid,
> retransmissionrequestStruct.cFromConnectionID,
> sizeof(retransmissionrequestStruct.cFromConnectionID));
>
>      string stringCmd("SELECT NVL(OUT_EVENT_ID,
> 0),NVL(TO_CHAR(BUS_DATE,'DD-MON-YYYY'),'
> '),NVL(TO_CHAR(TIME_ON_OUTEVENT,'DD-MON-YYYY HH24:MI:SS'),'
> '),NVL(TO_CHAR(TIME_OFF_OUTEVENT
> ,'DD-MON-YYYY HH24:MI:SS'),' '),NVL(AS_IS_ID,
> 0),NVL(TO_CHAR(T1_TIME,'DD-MON-YYYY HH24:MI:SS'),'
> '),NVL(TO_CHAR(T1_5_TIME,'DD-MON-YYYY HH24:MI:SS'),'
> '),NVL(TO_CHAR(T2_TIME,'DD-MON-
> YYYY HH24:MI:SS'),' '),NVL(TO_CHAR(T3_TIME,'DD-MON-YYYY HH24:MI:SS'),'
> '),NVL(TO_CHAR(T4_TIME,'DD-MON-YYYY HH24:MI:SS'),'
> '),NVL(TO_CHAR(T5_TIME,'DD-MON-YYYY HH24:MI:SS'),' '),NVL(
> TO_CHAR(T6_TIME,'DD-MON-YYYY HH24:MI:SS'),' '),NVL(MESSAGE_ID,'
> '),NVL(MESSAGE_TYPE,' '),NVL(OUT_SEQ_NO,' '),NVL(OUT_VERSION_NO,'
> '),NVL(SUBSCRIBER_ID,' '),NVL(OUT_CONNECTION_ID,'
> '),NVL(OUT_ACCOUNT_ID,' '),NVL(STATUS_IND,'
> '),NVL(TRAILING_OUT_MSG_DATA,' '),NVL(REJECT_CODE,' ')");
>
>          stringCmd.append(whereClause1);
>          stringCmd.append(tmpSeqno);
>          stringCmd.append(whereClause2);
>          stringCmd.append(tmpConnectionid);
>          stringCmd.append(whereClause3);
>
>         stringCmd.copy(cmd,stringCmd.size());
>
>                   EXEC SQL EXECUTE
>                         BEGIN
>                          EXECUTE IMMEDIATE :cmd
>                INTO :sqliOutEventKey,
>                      :sqlcBusinessDate,
>                           :sqlcTimeOnOutEvent,
>                           :sqlcTimeOffOutEvent,
>                           :sqliAsIsKey,
>                            :sqlcT1,
>                            :sqlcT1_5,
>                            :sqlcT2,
>                            :sqlcT3,
>                            :sqlcT4,
>                            :sqlcT5,
>                            :sqlcT6,
>                            :sqlcMsgID,
>                            :sqlcMsgType,
>                            :sqlcMsgSeqno,
>                            :sqlcVersion,
>                            :sqlcSubscriberID,
>                            :sqlcConnectionID,
>                            :sqlcAccountID,
>                            :sqlcStatus,
>                            :sqlcOutTrailingMsgData,
>                            :sqlcErrorCode;
>                         END;
>                  END-EXEC;
>
> Here's the generated code --
>    struct sqlexd sqlstm;
>    sqlstm.sqlvsn = 12;
>    sqlstm.arrsiz = 23;
>    sqlstm.sqladtp = &sqladt;
>    sqlstm.sqltdsp = &sqltds;
>    sqlstm.stmt = "begin EXECUTE IMMEDIATE :cmd
> INTO :sqliOutEventKey , :sqlc\
> BusinessDate , :sqlcTimeOnOutEvent , :sqlcTimeOffOutEvent , :sqliAsIsKey , :sq
> \
> lcT1 , :sqlcT1_5 , :sqlcT2 , :sqlcT3 , :sqlcT4 , :sqlcT5 , :sqlcT6 , :sqlcMsgI
> \
> D , :sqlcMsgType , :sqlcMsgSeqno , :sqlcVersion , :sqlcSubscriberID , :sqlcCon
> \
> nectionID , :sqlcAccountID , :sqlcStatus , :sqlcOutTrailingMsgData , :sqlcErro
> \
> rCode ; END ;";
>    sqlstm.iters = (unsigned int  )1;
>    sqlstm.offset = (unsigned int  )5;
>    sqlstm.cud = sqlcud0;
>    sqlstm.sqlest = (unsigned char  *)&sqlca;
>    sqlstm.sqlety = (unsigned short)256;
>    sqlstm.occurs = (unsigned int  )0;
>    sqlstm.sqhstv[0] = (unsigned char  *)cmd;
>    sqlstm.sqhstl[0] = (unsigned long )4096;
>    sqlstm.sqhsts[0] = (         int  )0;
>    sqlstm.sqindv[0] = (         short *)0;
>    sqlstm.sqinds[0] = (         int  )0;
>    sqlstm.sqharm[0] = (unsigned long )0;
>    sqlstm.sqadto[0] = (unsigned short )0;
>    sqlstm.sqtdso[0] = (unsigned short )0;
>    sqlstm.sqhstv[1] = (unsigned char  *)&sqliOutEventKey;
>    sqlstm.sqhstl[1] = (unsigned long )sizeof(long);
>    sqlstm.sqhsts[1] = (         int  )0;
>    sqlstm.sqindv[1] = (         short *)0;
>    sqlstm.sqinds[1] = (         int  )0;
>    sqlstm.sqharm[1] = (unsigned long )0;
>    sqlstm.sqadto[1] = (unsigned short )0;
>    sqlstm.sqtdso[1] = (unsigned short )0;
>    sqlstm.sqhstv[2] = (unsigned char  *)sqlcBusinessDate;
>    sqlstm.sqhstl[2] = (unsigned long )32;
>    sqlstm.sqhsts[2] = (         int  )0;
>    sqlstm.sqindv[2] = (         short *)0;
>    sqlstm.sqinds[2] = (         int  )0;
>    sqlstm.sqharm[2] = (unsigned long )0;
>    sqlstm.sqadto[2] = (unsigned short )0;
>    sqlstm.sqtdso[2] = (unsigned short )0;
>    sqlstm.sqhstv[3] = (unsigned char  *)sqlcTimeOnOutEvent;
>    sqlstm.sqhstl[3] = (unsigned long )32;
>    sqlstm.sqhsts[3] = (         int  )0;
>    sqlstm.sqindv[3] = (         short *)0;
>    sqlstm.sqinds[3] = (         int  )0;
>    sqlstm.sqharm[3] = (unsigned long )0;
>    sqlstm.sqadto[3] = (unsigned short )0;
>    sqlstm.sqtdso[3] = (unsigned short )0;
>    sqlstm.sqhstv[4] = (unsigned char  *)sqlcTimeOffOutEvent;
>    sqlstm.sqhstl[4] = (unsigned long )32;
>    sqlstm.sqhsts[4] = (         int  )0;
>    sqlstm.sqindv[4] = (         short *)0;
>    sqlstm.sqinds[4] = (         int  )0;
>    sqlstm.sqharm[4] = (unsigned long )0;
>    sqlstm.sqadto[4] = (unsigned short )0;
>    sqlstm.sqtdso[4] = (unsigned short )0;
>    sqlstm.sqhstv[5] = (unsigned char  *)&sqliAsIsKey;
>    sqlstm.sqhstl[5] = (unsigned long )sizeof(long);
>    sqlstm.sqhsts[5] = (         int  )0;
>    sqlstm.sqindv[5] = (         short *)0;
>    sqlstm.sqinds[5] = (         int  )0;
>    sqlstm.sqharm[5] = (unsigned long )0;
>    sqlstm.sqadto[5] = (unsigned short )0;
>    sqlstm.sqtdso[5] = (unsigned short )0;
>    sqlstm.sqhstv[6] = (unsigned char  *)sqlcT1;
>    sqlstm.sqhstl[6] = (unsigned long )32;
>    sqlstm.sqhsts[6] = (         int  )0;
>    sqlstm.sqindv[6] = (         short *)0;
>    sqlstm.sqinds[6] = (         int  )0;
>    sqlstm.sqharm[6] = (unsigned long )0;
>    sqlstm.sqadto[6] = (unsigned short )0;
>    sqlstm.sqtdso[6] = (unsigned short )0;
>    sqlstm.sqhstv[7] = (unsigned char  *)sqlcT1_5;
>    sqlstm.sqhstl[7] = (unsigned long )32;
>    sqlstm.sqhsts[7] = (         int  )0;
>    sqlstm.sqindv[7] = (         short *)0;
>    sqlstm.sqinds[7] = (         int  )0;
>    sqlstm.sqharm[7] = (unsigned long )0;
>    sqlstm.sqadto[7] = (unsigned short )0;
>    sqlstm.sqtdso[7] = (unsigned short )0;
>    sqlstm.sqhstv[8] = (unsigned char  *)sqlcT2;
>    sqlstm.sqhstl[8] = (unsigned long )32;
>    sqlstm.sqhsts[8] = (         int  )0;
>    sqlstm.sqindv[8] = (         short *)0;
>    sqlstm.sqinds[8] = (         int  )0;
>    sqlstm.sqharm[8] = (unsigned long )0;
>    sqlstm.sqadto[8] = (unsigned short )0;
>    sqlstm.sqtdso[8] = (unsigned short )0;
>    sqlstm.sqhstv[9] = (unsigned char  *)sqlcT3;
>    sqlstm.sqhstl[9] = (unsigned long )32;
>    sqlstm.sqhsts[9] = (         int  )0;
>    sqlstm.sqindv[9] = (         short *)0;
>    sqlstm.sqinds[9] = (         int  )0;
>    sqlstm.sqharm[9] = (unsigned long )0;
>    sqlstm.sqadto[9] = (unsigned short )0;
>    sqlstm.sqtdso[9] = (unsigned short )0;
>    sqlstm.sqhstv[10] = (unsigned char  *)sqlcT4;
>    sqlstm.sqhstl[10] = (unsigned long )32;
>    sqlstm.sqhsts[10] = (         int  )0;
>    sqlstm.sqindv[10] = (         short *)0;
>    sqlstm.sqinds[10] = (         int  )0;
>    sqlstm.sqharm[10] = (unsigned long )0;
>    sqlstm.sqadto[10] = (unsigned short )0;
>    sqlstm.sqtdso[10] = (unsigned short )0;
>    sqlstm.sqhstv[11] = (unsigned char  *)sqlcT5;
>    sqlstm.sqhstl[11] = (unsigned long )32;
>    sqlstm.sqhsts[11] = (         int  )0;
>    sqlstm.sqindv[11] = (         short *)0;
>    sqlstm.sqinds[11] = (         int  )0;
>    sqlstm.sqharm[11] = (unsigned long )0;
>    sqlstm.sqadto[11] = (unsigned short )0;
>    sqlstm.sqtdso[11] = (unsigned short )0;
>    sqlstm.sqhstv[12] = (unsigned char  *)sqlcT6;
>    sqlstm.sqhstl[12] = (unsigned long )32;
>    sqlstm.sqhsts[12] = (         int  )0;
>    sqlstm.sqindv[12] = (         short *)0;
>    sqlstm.sqinds[12] = (         int  )0;
>    sqlstm.sqharm[12] = (unsigned long )0;
>    sqlstm.sqadto[12] = (unsigned short )0;
>    sqlstm.sqtdso[12] = (unsigned short )0;
>    sqlstm.sqhstv[13] = (unsigned char  *)sqlcMsgID;
>    sqlstm.sqhstl[13] = (unsigned long )15;
>    sqlstm.sqhsts[13] = (         int  )0;
>    sqlstm.sqindv[13] = (         short *)0;
>    sqlstm.sqinds[13] = (         int  )0;
>    sqlstm.sqharm[13] = (unsigned long )0;
>    sqlstm.sqadto[13] = (unsigned short )0;
>    sqlstm.sqtdso[13] = (unsigned short )0;
>    sqlstm.sqhstv[14] = (unsigned char  *)sqlcMsgType;
>    sqlstm.sqhstl[14] = (unsigned long )2;
>    sqlstm.sqhsts[14] = (         int  )0;
>    sqlstm.sqindv[14] = (         short *)0;
>    sqlstm.sqinds[14] = (         int  )0;
>    sqlstm.sqharm[14] = (unsigned long )0;
>    sqlstm.sqadto[14] = (unsigned short )0;
>    sqlstm.sqtdso[14] = (unsigned short )0;
>    sqlstm.sqhstv[15] = (unsigned char  *)sqlcMsgSeqno;
>    sqlstm.sqhstl[15] = (unsigned long )6;
>    sqlstm.sqhsts[15] = (         int  )0;
>    sqlstm.sqindv[15] = (         short *)0;
>    sqlstm.sqinds[15] = (         int  )0;
>    sqlstm.sqharm[15] = (unsigned long )0;
>    sqlstm.sqadto[15] = (unsigned short )0;
>    sqlstm.sqtdso[15] = (unsigned short )0;
>    sqlstm.sqhstv[16] = (unsigned char  *)sqlcVersion;
>    sqlstm.sqhstl[16] = (unsigned long )3;
>    sqlstm.sqhsts[16] = (         int  )0;
>    sqlstm.sqindv[16] = (         short *)0;
>    sqlstm.sqinds[16] = (         int  )0;
>    sqlstm.sqharm[16] = (unsigned long )0;
>    sqlstm.sqadto[16] = (unsigned short )0;
>    sqlstm.sqtdso[16] = (unsigned short )0;
>    sqlstm.sqhstv[17] = (unsigned char  *)sqlcSubscriberID;
>    sqlstm.sqhstl[17] = (unsigned long )4;
>    sqlstm.sqhsts[17] = (         int  )0;
>    sqlstm.sqindv[17] = (         short *)0;
>    sqlstm.sqinds[17] = (         int  )0;
>    sqlstm.sqharm[17] = (unsigned long )0;
>    sqlstm.sqadto[17] = (unsigned short )0;
>    sqlstm.sqtdso[17] = (unsigned short )0;
>    sqlstm.sqhstv[18] = (unsigned char  *)sqlcConnectionID;
>    sqlstm.sqhstl[18] = (unsigned long )4;
>    sqlstm.sqhsts[18] = (         int  )0;
>    sqlstm.sqindv[18] = (         short *)0;
>    sqlstm.sqinds[18] = (         int  )0;
>    sqlstm.sqharm[18] = (unsigned long )0;
>    sqlstm.sqadto[18] = (unsigned short )0;
>    sqlstm.sqtdso[18] = (unsigned short )0;
>    sqlstm.sqhstv[19] = (unsigned char  *)sqlcAccountID;
>    sqlstm.sqhstl[19] = (unsigned long )4;
>    sqlstm.sqhsts[19] = (         int  )0;
>    sqlstm.sqindv[19] = (         short *)0;
>    sqlstm.sqinds[19] = (         int  )0;
>    sqlstm.sqharm[19] = (unsigned long )0;
>    sqlstm.sqadto[19] = (unsigned short )0;
>    sqlstm.sqtdso[19] = (unsigned short )0;
>    sqlstm.sqhstv[20] = (unsigned char  *)sqlcStatus;
>    sqlstm.sqhstl[20] = (unsigned long )1;
>    sqlstm.sqhsts[20] = (         int  )0;
>    sqlstm.sqindv[20] = (         short *)0;
>    sqlstm.sqinds[20] = (         int  )0;
>    sqlstm.sqharm[20] = (unsigned long )0;
>    sqlstm.sqadto[20] = (unsigned short )0;
>    sqlstm.sqtdso[20] = (unsigned short )0;
>    sqlstm.sqhstv[21] = (unsigned char  *)sqlcOutTrailingMsgData;
>    sqlstm.sqhstl[21] = (unsigned long )256;
>    sqlstm.sqhsts[21] = (         int  )0;
>    sqlstm.sqindv[21] = (         short *)0;
>    sqlstm.sqinds[21] = (         int  )0;
>    sqlstm.sqharm[21] = (unsigned long )0;
>    sqlstm.sqadto[21] = (unsigned short )0;
>    sqlstm.sqtdso[21] = (unsigned short )0;
>    sqlstm.sqhstv[22] = (unsigned char  *)sqlcErrorCode;
>    sqlstm.sqhstl[22] = (unsigned long )4;
>    sqlstm.sqhsts[22] = (         int  )0;
>    sqlstm.sqindv[22] = (         short *)0;
>    sqlstm.sqinds[22] = (         int  )0;
>    sqlstm.sqharm[22] = (unsigned long )0;
>    sqlstm.sqadto[22] = (unsigned short )0;
>    sqlstm.sqtdso[22] = (unsigned short )0;
>    sqlstm.sqphsv = sqlstm.sqhstv;
>    sqlstm.sqphsl = sqlstm.sqhstl;
>    sqlstm.sqphss = sqlstm.sqhsts;
>    sqlstm.sqpind = sqlstm.sqindv;
>    sqlstm.sqpins = sqlstm.sqinds;
>    sqlstm.sqparm = sqlstm.sqharm;
>    sqlstm.sqparc = sqlstm.sqharc;
>    sqlstm.sqpadto = sqlstm.sqadto;
>    sqlstm.sqptdso = sqlstm.sqtdso;
>    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);

I did not read the code carefully because it the gererated code rather than just the original pro*c but normally most problems the developers I have worked with suffer come down to the following things: failure to properly terminate C strings, failure to set and check the length indicator, failure to declare and check null indicators for every nullable column, and failure to handle errors properly.

Because you can get the data when you process the failing rows without the other data that implies that you are likely suffering from some type of overflow or data handling condition.

HTH -- Mark D Powell -- Received on Sat Feb 02 2008 - 19:53:21 CST

Original text of this message