IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Lire une colonne Oracle de type BLOB avec 4D for OCI

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

Voici un code exemple qui récupère les données dans une colonne Oracle de type BLOB avec les commandes du plugin 4D for OCI 2004 :

 
Sélectionnez
  ` ----------------------------------------------------
  ` User name (OS): Stirtiat
  ` Date and time: 27/06/07, 18:42:22
  ` ----------------------------------------------------
  ` Method: OCI_LIRE_BLOB
  ` ----------------------------------------------------

  `paramètres de connexion à modifier
$user:="xxx"
$password:="xxx"
$server:="xxx"
  `login complexe
status:=OCIEnvCreate (envhp;OCI_DEFAULT )
status:=OCIHandleAlloc (envhp;errhp;OCI_HTYPE_ERROR )
status:=OCIHandleAlloc (envhp;svchp;OCI_HTYPE_SVCCTX )
status:=OCIHandleAlloc (envhp;authp;OCI_HTYPE_SESSION )
status:=OCIHandleAlloc (envhp;srvhp;OCI_HTYPE_SERVER )
status:=OCIServerAttach (srvhp;errhp;$server)
status:=OCIAttrSetVal (svchp;srvhp;OCI_ATTR_SERVER ;errhp)
status:=OCIAttrSetText (authp;$user;OCI_ATTR_USERNAME ;errhp)
status:=OCIAttrSetText (authp;$password;OCI_ATTR_PASSWORD ;errhp)
status:=OCISessionBegin (svchp;errhp;authp;OCI_CRED_RDBMS ;OCI_DEFAULT )
status:=OCIAttrSetVal (svchp;authp;OCI_ATTR_SESSION ;errhp)

  `requête SQL
$sql_statement:="SELECT t_blob FROM test_lob WHERE t_id = 1"

C_ENTIER LONG(bloblocator)
C_ENTIER LONG($define;$position;$sqlt)
C_POINTEUR($p_define)
C_ENTIER LONG(null_ind01;rlen01;rcode01)

bloblocator:=0
$define:=0
$position:=1
$p_define:=->bloblocator
$sqlt:=SQLT_BLOB 
C_BLOB($blob)

  `préparation requête
status:=OCIHandleAlloc (envhp;stmthp;OCI_HTYPE_STMT )
status:=OCIDescriptorAlloc (envhp;bloblocator;OCI_DTYPE_LOB )
status:=OCIStmtPrepare (stmthp;errhp;$sql_statement;OCI_DEFAULT )
status:=OCIDefineByPos (stmthp;$define;errhp;$position;$p_define;$sqlt;->null_ind01;->rlen01;->rcode01;OCI_DEFAULT )

status:=OCIStmtExecute (svchp;stmthp;errhp;1;0;0;0;OCI_DEFAULT )

status:=OCILobRead (svchp;errhp;bloblocator;1;$blob)

  `libération
status:=OCIDescriptorFree (bloblocator)
status:=OCIHandleFree (stmthp)
status:=OCISessionEnd (svchp;errhp;authp)
status:=OCIServerDetach (srvhp;errhp)
status:=OCICleanUp 

  `récupération du blob dans un fichier
Si (Taille BLOB($blob)>0)

    `si la colonne BLOB Oracle a été alimentée par 4D for Oracle,
    `il faut retirer les 8 premiers octets du BLOB reçu
    `SUPPRIMER DANS BLOB($blob;0;8)

    `on nomme en dur le fichier mais on peut créer le nom par programmation
    `et récupérer le type de fichier dans le blob pour l'extension
    `  --voir astuce "Tester des documents image par leur marqueur"(*)
  $DocRef:=Creer document("image_1.jpg")
  Si (OK=1)
    FERMER DOCUMENT($DocRef)
    BLOB VERS DOCUMENT(Document;$blob)
  Fin de si 

Sinon 
  ALERTE("Pas de contenu dans le blob !")
Fin de si 

  `on vide le blob
FIXER TAILLE BLOB($blob;0)

Description de la table Oracle qui a servi à cet exemple :

 
Sélectionnez
CREATE TABLE TEST_LOB (
  T_ID NUMBER(5,0), 
  T_NAME VARCHAR2(80), 
  T_BLOB BLOB
);

Compléments d'information :
   · Documentations Oracle et 4D for OCI
   · 4D for OCI : Lire une colonne Oracle de type LONG RAW
   · 4D for OCI : Écrire dans une colonne Oracle de type LONG RAW
   · 4D ODBC Pro : Lire une colonne Oracle de type BLOB
   · 4D ODBC Pro : Écrire dans une colonne Oracle de type BLOB
   · Introduction aux OCI
   · 4D et les autres SGBDR

(*) Tester des documents image par leur marqueur

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

Copyright © 2007 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.