Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.tools -> Long datatype

Long datatype

From: David Mallarme <mallarme_at_univ-valenciennes.fr>
Date: 1997/02/21
Message-ID: <330DC7A2.424F@univ-valenciennes.fr>#1/1

I thought I have succeeded in using LONG datatype with PRO-C but I am sure now that the 'border effect' I have come from this code.

Can anyone give me an example that really work ?

Here is an example of code I use :

typedef struct TAGtexte
{

  long len;
  char arr[12001];
} texte_c;

To get :

void ORA_Recup_texte

          (
	   outp EXCEPTION  *Ptr_Status,
	   inp   char       *Ptr_base,
	   inp   int         Ptr_cle,
	   outp  char      **contenu
     )

{

  EXEC SQL WHENEVER SQLERROR    GOTO ERREUR_RECUP_TEXTE;
  EXEC SQL WHENEVER SQLWARNING  GOTO ERREUR_RECUP_TEXTE;
  EXEC SQL WHENEVER NOT FOUND   GOTO ERREUR_RECUP_TEXTE;
    

  EXEC SQL BEGIN DECLARE SECTION;
  EXEC SQL TYPE texte_c IS LONG REFERENCE;   int Hote_cle;
  texte_c *text_r;
  EXEC SQL END DECLARE SECTION;    /.../

  text_r = (texte_c *)malloc(sizeof(texte_c));   text_r->len=12001;   

  EXEC SQL SELECT tt_commentaire INTO :text_r     FROM matiere_tt_texte
    WHERE (tt_cle_texte = :Hote_cle) ;     

 /* recuperation du contenu de la chaine pour passage en parametre */  

 *contenu = (char *)malloc(sizeof(char)*(text_r->len)+1);  

 /.../

  free(text_r);
  return ;   

ERREUR_RECUP_TEXTE:    /.../

  free(text_r);
  return;
}

To store :

void ORA_Stocke_texte

          (
	   outp EXCEPTION  *Ptr_Status,
	   inp   char      *Ptr_base,
	   inp   int        Ptr_cle,
	   inp   char      *contenu
     )

{

  EXEC SQL WHENEVER SQLERROR    GOTO ERREUR_STOCKE_TEXTE;
  EXEC SQL WHENEVER SQLWARNING  GOTO ERREUR_STOCKE_TEXTE;
  EXEC SQL WHENEVER NOT FOUND   GOTO ERREUR_STOCKE_TEXTE;

  EXEC SQL BEGIN DECLARE SECTION;
  EXEC SQL TYPE texte_c IS LONG REFERENCE;

  int Hote_cle;
  int Hote_longueur;
  int Hote_existence;

  texte_c *text_c;
  EXEC SQL END DECLARE SECTION;    /.../

  /* on prepare la structure qui recoit la chaine a stocker */   text_c = (texte_c *)malloc(sizeof(texte_c));   strcpy(text_c->arr, contenu);
  text_c->len = (long)strlen(contenu);
  Hote_longueur = (int)text_c->len;   

      EXEC SQL SELECT COUNT(ROWID) INTO :Hote_existence FROM matiere_tt_texte WHERE (tt_cle_texte = :Hote_cle);

      if (Hote_existence!=0) 
	EXEC SQL  UPDATE matiere_tt_texte
	  set tt_commentaire = :text_c,
	  tt_longueur_comment = :Hote_longueur
	  WHERE (tt_cle_texte = :Hote_cle) ;
      else 
	EXEC SQL INSERT INTO matiere_tt_texte( tt_cle_texte, tt_commentaire,
tt_longueur_comment ) values ( :Hote_cle, :text_c, :Hote_longueur );   

 free(text_c);
  return;

ERREUR_STOCKE_TEXTE:   /.../

  free(text_c);
  return;
}

The table :

create table matiere_tt_texte

   	(
	tt_cle_texte,
  	tt_commentaire LONG, 
	tt_longueur_comment number(6),
    	CONSTRAINT cle_matiere_tt_existante FOREIGN KEY(tt_cle_texte)
		REFERENCES matiere_tt(tt_cle)
	);

David M.
Received on Fri Feb 21 1997 - 00:00:00 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US