Link to home
Start Free TrialLog in
Avatar of tplai
tplai

asked on

ORA-01460 : unimplemented or unreasonable conversion requested.

This piece of Pro*C code works correctly on Sun Solaris, Oracle 7.3.4, and wrong on Sun Solaris, Oracle 8.0.4.

/*--------------------------------------------------------------------
                    * FONCTION   : ora_getregio
                    * AUTEUR     :
                    * CREE LE    : 22 Decembre 1999
                    * MODIFIE LE : 23 Decembre 1999
                    * ENTREES    : # idregion : identifiant de la region courante.
                    * SORTIES    : # infosreg : informations sur la region.
                    * RESULTAT   :  0 si traitement OK,
                    *            : -1 si probleme de traitement.
                    * EXTERNE    : -
                    * ACTION     : Recuperation des informations d'une région dans la base Oracle.
                    * NOTES      : -
                    * ATTENTION  : -
                    * REVISION   : -
                    *--------------------------------------------------------------------
                    */
                   int ora_getregio(char *idregion, TYPE_ORA_REG *infosreg)
                   {

                     /**---------------------------------------------------------------**/
                     /** Declarations des variables de travail.                        **/
                     /**---------------------------------------------------------------**/
                     int lg;
                     char typeregi = 'R';

                     EXEC SQL WHENEVER SQLERROR GOTO error_getregio;
                     EXEC SQL WHENEVER NOT FOUND CONTINUE;

                     /**---------------------------------------------------------------**/
                     /** Selection de la region souhaitee.                             **/
                     /**---------------------------------------------------------------**/
                     (void) uti_trace_print("%s: ora_getregio: avant requete ...\n", MODULE);
                     EXEC SQL
                       SELECT codezone, libezone
                         INTO :infosreg
                         FROM REGDEP
                         WHERE typezone=:typeregi AND codezone=:idregion;
                     (void) uti_trace_print("%s: ora_getregio: apres requete ...\n", MODULE);
/**---------------------------------------------------------------**/
                     /** Normalisation des informations sur la region souhaitee.       **/
                     /**---------------------------------------------------------------**/
                     lg = uti_lenutile(infosreg->coderegi, sizeof(infosreg->coderegi));
                     infosreg->coderegi[lg] = 0;
                     lg = uti_lenutile(infosreg->liberegi, sizeof(infosreg->liberegi));
                     infosreg->liberegi[lg] = 0;

                     /**---------------------------------------------------------------**/
                     /** Sortie normale                                                **/
                     /**---------------------------------------------------------------**/
                     return (0);

                     /**---------------------------------------------------------------**/
                     /** Traitement en cas d'erreur.                                   **/
                     /**---------------------------------------------------------------**/
                     error_getregio:
                       ora_sqlerror("ora_getregio: Probleme de recuperation des informations d'une region dans la
                   base Oracle ...");
                       return(-1);
                   }

And here is the result :

                   TRA, 25/01/2000, 08:43:51, ORAFONCS: ora_getregio: avant requete ...
                   ERR, 25/01/2000, 08:43:51, ORAFONCS: ERREUR: ora_getregio: Probleme de recuperation des
                   informations d'une region dans la base Oracle ...
                   ERR, 25/01/2000, 08:43:51, ORAFONCS: ERREUR: ORA-01460: unimplemented or unreasonable
                   conversion requested


Here are my variables :
                   NLS_LANG = FRENCH_FRANCE.WE8ISO8859P1.
                   ORACLE_BASE = /medoc/vol1/oracle
                   ORACLE_HOME = /medoc/vol1/oracle/product/804
                   ORACLE_SID = A
                   ORACLE_TERM = sun5

                   Are these definitions compatible with my piece of code ?

                   Thanks for your answer.

                   Thierry
Avatar of Hauke
Hauke

Could you give us a description of the table REGDEP?
Avatar of tplai

ASKER

---------------------------------------------------------
-- Table des regions et departements                   --
---------------------------------------------------------
create table regdep (
  typezone varchar2(1),
  codezone varchar2(3),
  libezone varchar2(30),
  coderegi varchar2(2)
)
tablespace annuaire
storage (initial 10k next 10k pctincrease 0);
Avatar of tplai

ASKER

I have changed my function and it works on Oracle 7.3.4 and 8.0.4, but I don't undestand why !!!

Here is the new code :

int ora_getregio(char *idregion, TYPE_ORA_REG *infosreg)
{

  /**---------------------------------------------------------------**/
  /** Declarations des variables de travail.                        **/
  /**---------------------------------------------------------------**/
  int lg;
  char requete[BUFSIZ];

  EXEC SQL WHENEVER SQLERROR GOTO error_getregio;
  EXEC SQL WHENEVER NOT FOUND CONTINUE;

  /**---------------------------------------------------------------**/
  /** Selection de la region souhaitee.                             **/
  /**---------------------------------------------------------------**/
  (void) sprintf(requete, "SELECT codezone, libezone FROM REGDEP WHERE typezone='R' AND codezone='%s'", idregion);  
  (void) uti_trace_print("%s: requete = %s\n", MODULE, requete);

  /**---------------------------------------------------------------**/
  /** Recuperation des informations sur la region souhaitee.        **/
  /**---------------------------------------------------------------**/
  EXEC SQL PREPARE T FROM :requete;
  EXEC SQL DECLARE cur_infos_reg CURSOR FOR T;
  EXEC SQL OPEN cur_infos_reg;
  EXEC SQL FETCH cur_infos_reg INTO :infosreg;

  /**---------------------------------------------------------------**/
  /** Normalisation des informations sur la region souhaitee.       **/
  /**---------------------------------------------------------------**/
  lg = uti_lenutile(infosreg->coderegi, sizeof(infosreg->coderegi));
  infosreg->coderegi[lg] = 0;
  lg = uti_lenutile(infosreg->liberegi, sizeof(infosreg->liberegi));
  infosreg->liberegi[lg] = 0;

  /**---------------------------------------------------------------**/
  /** Sortie normale                                                **/
  /**---------------------------------------------------------------**/
  return (0);

  /**---------------------------------------------------------------**/
  /** Traitement en cas d'erreur.                                   **/
  /**---------------------------------------------------------------**/
  error_getregio:
    ora_sqlerror("ora_getregio: Probleme de recuperation des informations d'une region dans la base Oracle ...");
    return(-1);
}

ASKER CERTIFIED SOLUTION
Avatar of Hauke
Hauke

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial