Lire dans une colonne LONG RAW

Code exemple pour lire dans une colonne Oracle de type LONG RAW avec 4D for OCI

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

Produit : 4D OCI 2004  ·  Plateforme : Mac & Win


Avec 4D for OCI 2004.3, vous pouvez lire et retrouver le contenu d'une colonne LONG RAW dans une base Oracle à condition de réunir ces trois conditions :

   1. la variable de réception doit être de type BLOB

   2. le datatype doit être SQLT_LBI

   3. le mode doit être OCI_DYNAMIC_FETCH (et non OCI_DEFAULT)


Exemple de code:

   `methode Lecture_long_raw
   `lit les données d’une colonne long raw
   `et crée le fichier image (jpg) dans le dossier de la base

C_ENTIER LONG(envhp;errhp;svchp;vDefine;stmthp;stmtSelecthp)
C_ENTIER LONG(RealLength)
C_BLOB(ZeBlob)

   `--------------------------------------------
   `CONDITION 1 : blob

FIXER TAILLE BLOB(ZeBlob;0)
   `--------------------------------------------

C_POINTEUR(vp_Null1;vp_Null3)
ReadLength:=0

C_TEXTE($UserName;$Password;$ServiceName;$SQL_statement)

$UserName:="xxx"
$Password:="xxx"
$ServiceName:="xxx"

Status:=OCIEnvCreate (envhp;OCI_OBJECT )
Status:=OCIHandleAlloc (envhp;errhp;OCI_HTYPE_ERROR )
Status:=OCILogon (envhp;errhp;svchp;$UserName;$Password;$ServiceName)
Status:=OCIHandleAlloc (envhp;stmthp;OCI_HTYPE_STMT )

$SQL_statement:="SELECT lgraw FROM test_LGRAW WHERE key = 20"
Status:=OCIHandleAlloc (envhp;stmtSelecthp;OCI_HTYPE_STMT )
Si (Status=OCI_SUCCESS )
   Status:=OCIStmtPrepare (stmtSelecthp;errhp;$SQL_statement;OCI_DEFAULT )
      `--------------------------------------------
      ` CONDITION 2 : SQLT_LBI for LONG RAW
      ` CONDITION 3 : OCI_DYNAMIC_FETCH instead of OCI_DEFAULT
   Status:=OCIDefineByPos (stmtSelecthp;vDefine;errhp;1;->ZeBlob;SQLT_LBI ;vp_Null1;
->ReadLength;vp_Null3;OCI_DYNAMIC_FETCH )
      `--------------------------------------------
   $status:=OCIErrorGet (errhp;1;$errornum;$errorexplain)
Si ($errornum#0)
ALERTE(Chaine($errornum)+Caractere(13)+$errorexplain)
Fin de si
Repeter
      Status:=OCIStmtExecute (svchp;stmtSelecthp;errhp;1;0;0;0;OCI_DEFAULT )
Jusque (Status#OCI_STILL_EXECUTING )
   Status:=OCIHandleFree (stmtSelecthp)
Fin de si

   `supprimer les 8 premiers caractères si l'image a été insérée avec 4D for Oracle
SUPPRIMER DANS BLOB(ZeBlob;0;8)

Si (ReadLength>0)
   $DocRef:=Creer document("longraw_image.jpg")
Si (OK=1)
FERMER DOCUMENT($DocRef)
BLOB VERS DOCUMENT(Document;ZeBlob)
Fin de si
Sinon
ALERTE("Taille du blob : zero !")
Fin de si

Status:=OCIHandleFree (stmthp)
Status:=OCILogoff (svchp;errhp)
Status:=OCIHandleFree (errhp)
Status:=OCICleanUp (envhp)

FIXER TAILLE BLOB(ZeBlob;0) `empty blob

   `fin de methode

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 4D s.a. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.