Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


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

Date de publication : 27/06/2007

Par Stéphanie Tirtiat (Intl Tech Support)
 



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 :

code 4D

  ` ----------------------------------------------------
  ` 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 :

CREATE TABLE TEST_LOB (
  T_ID NUMBER(5,0), 
  T_NAME VARCHAR2(80), 
  T_BLOB BLOB
);
info Compléments d'information :
   · Documentations Oracle et 4D for OCI
   · 4D for OCI : Lire une colonne Oracle de type LONG RAW
   · 4D for OCI : Ecrire dans une colonne Oracle de type LONG RAW
   · 4D ODBC Pro : Lire une colonne Oracle de type BLOB
   · 4D ODBC Pro : Ecrire dans une colonne Oracle de type BLOB
   · Introduction aux OCI
   · 4D et les autres SGBDR

(*) Tester des documents image par leur marqueur



Valid XHTML 1.1!Valid CSS!

Copyright © 2007 4D s.a. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

Contacter le responsable de la rubrique 4D