Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.tools -> Long datatype
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;
/* 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) );