Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Forum 4D Documentations F.A.Q 4D Trucs & astuces Notes techniques 4D & SGBDR 4D & XML 4D & Web Livres 4D

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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique 4D : Elgo - Contacter par EMail :
Vos questions techniques : forum d'entraide 4D - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.