OCI (in C) : errror reporting for an SQL-statement

From: Torsten Reichert <Torsten.Reichert_at_gmx.net>
Date: Thu, 27 Sep 2001 10:06:38 +0200
Message-ID: <3BB2DE0E.2000004_at_gmx.net>


void err_report(Cda_Def *cursor, char *sql_cmd) {

   /*
Oracle 7.3.4.OCI

If your SQL statement does not cause a parse error, Oracle sets sqlca.sqlerrd[4] to zero.
Oracle also sets sqlca.sqlerrd[4] to zero if a parse error begins at the first character (which occupies position zero). So, check sqlca.sqlerrd[4] only if sqlca.sqlcode is negative, which means that an error has occurred.

    */
  auto sword n;
  auto text msg[512];

   printf("\n-- ORACLE error--\n");
   n = oerhms(&lda, cursor->rc, msg, (sword) sizeof msg); fprintf(stderr, "%s", msg);

   if (cursor->fc > 0) { fprintf(stderr, "Processing OCI function %s\n", oci_func_tab[cursor->fc]); }

   fprintf(stderr, "v2_rc=%i\n", cursor->v2_rc);
   fprintf(stderr, "rc=%i\n", cursor->rc);
   fprintf(stderr, "ft=%i\n", cursor->ft);
   fprintf(stderr, "rpc=%i\n", cursor->rpc);
   fprintf(stderr, "peo=%i (%s)\n", cursor->peo, (NULL==sql_cmd) ? "" : 
&(sql_cmd[cursor->peo]));
   fprintf(stderr, "wrn=%i\n", cursor->wrn);
   fprintf(stderr, "rcs1=%i\n", cursor->rcs1);
   fprintf(stderr, "rcs2=%i\n", cursor->rcs2);
   fprintf(stderr, "rcs3=%i\n", cursor->rcs3);
   fprintf(stderr, "rid.rd.rcs4=%i\n", cursor->rid.rd.rcs4);
   fprintf(stderr, "rid.rd.rcs5=%i\n", cursor->rid.rd.rcs5);
   fprintf(stderr, "rid.rd.rcs6=%i\n", cursor->rid.rd.rcs6);
   fprintf(stderr, "rid.rcs7=%i\n", cursor->rid.rcs7);
   fprintf(stderr, "rid.rcs8=%i\n", cursor->rid.rcs8);
   fprintf(stderr, "ose=%i\n", cursor->ose);
   fprintf(stderr, "chk=%i\n", cursor->chk);
   /* Filler: fprintf(stderr, "rcs9=%s\n", cursor->rcs9); */ }

outputs something like this:
-- ORACLE error--
ORA-01008: not all variables bound
Processing OCI function OEXEC, OEXN
v2_rc=-1008
rc=1008
ft=5
rpc=0
peo=7 (BOSS___A SET F003=decode('_at_@@@',NULL,F003,'@@@@'),

F004=decode('56',NULL,F004,'56'),
P012=decode('_at_@@@@@@@',NULL,P012,TO_DATE('@@@@@@@@','YYYYMMDD')),
P713=decode('00000000.50000',NULL,P713,'00000000.50000'),
P014=decode('_at_@@@',NULL,P014,'@@@@'),
P715=decode('_at_@@@@@@@@@@@@@',NULL,P715,'@@@@@@@@@@@@@@'),
P016=decode('_at_@@@',NULL,P016,'@@@@'),
P717=decode('_at_@@@@@@@@@@@@@',NULL,P717,'@@@@@@@@@@@@@@'),
P018=decode('_at_@@@',NULL,P018,'@@@@'),
P719=decode('_at_@@@@@@@@@@@@@',NULL,P719,'@@@@@@@@@@@@@@'),
P020=decode('_at_@@@',NULL,P020,'@@@@'),
P721=decode('_at_@@@@@@@@@@@@@',NULL,P721,'@@@@@@@@@@@@@@'),
P022=decode('_at_@@@',NULL,P022,'@@@@'),
P723=decode('_at_@@@@@@@@@@@@@',NULL,P723,'@@@@@@@@@@@@@@'),
P024=decode('_at_@@@',NULL,P024,'@@@@'),
P708=decode('_at_@@@',NULL,P708,'@@@@'),
P729=decode('_at_@@@@@@@@@@@@@@@',NULL,P729,'@@@@@@@@@@@@@@@@'),
P730=decode('_at_@@@@@@@@@@@@@@',NULL,P730,'@@@@@@@@@@@@@@@'),
F030=decode('_at_',NULL,F030,'@'),
F031=decode('1',NULL,F031,'1'),
F032=decode('_at_',NULL,F032,'@'),
F033=decode('_at_@@@',NULL,F033,'@@@@'),
F038=decode('_at_@@@@@',NULL,F038,'@@@@@@'),
F078=decode('_at_@@@@@@@',NULL,F078,TO_DATE('@@@@@@@@','YYYYMMDD')),
F079=decode('20011001',NULL,F079,TO_DATE('20011001','YYYYMMDD')),
F099=decode('A',NULL,F099,'A'),
F100=decode('20010924',NULL,F100,TO_DATE('20010924','YYYYMMDD')),
WHERE
K001='DE0001066280',
K002='EUR ',
K003='HAN',

)
wrn=0
rcs1=0
rcs2=0
rcs3=1
rid.rd.rcs4=0
rid.rd.rcs5=0
rid.rd.rcs6=0

rid.rcs7=0
rid.rcs8=0
ose=0
chk=0

Documentation to be found in

        ${ORACLE_DOC}/dcommon/oin/indexj.htm Received on Thu Sep 27 2001 - 10:06:38 CEST

Original text of this message