Lire dans une colonne LONG RAW

Stéphanie Tirtiat

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

- Titre : Lire dans une colonne LONG RAW

- Auteur : Stéphanie Tirtiat

- Parution : 15 décembre 2005

- Licence : Copyright ® 2005 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.

Sommaire

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:

1. `methode Lecture_long_raw

2. `lit les données d’une colonne long raw

3. `et crée le fichier image (jpg) dans le dossier de la base

5. C_ENTIER LONG(envhp;errhp;svchp;vDefine;stmthp;stmtSelecthp)

6. C_ENTIER LONG(RealLength)

7. C_BLOB(ZeBlob)

9. `--------------------------------------------

10. `CONDITION 1 : blob

11. FIXER TAILLE BLOB(ZeBlob;0)

12. `--------------------------------------------

14. C_POINTEUR(vp_Null1;vp_Null3)

15. ReadLength:=0

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

19. $UserName:="xxx"

20. $Password:="xxx"

21. $ServiceName:="xxx"

23. Status:=OCIEnvCreate (envhp;OCI_OBJECT )

24. Status:=OCIHandleAlloc (envhp;errhp;OCI_HTYPE_ERROR )

25. Status:=OCILogon (envhp;errhp;svchp;$UserName;$Password;$ServiceName)

26. Status:=OCIHandleAlloc (envhp;stmthp;OCI_HTYPE_STMT )

28. $SQL_statement:="SELECT lgraw FROM test_LGRAW WHERE key = 20"

29. Status:=OCIHandleAlloc (envhp;stmtSelecthp;OCI_HTYPE_STMT )

30. Si (Status=OCI_SUCCESS )

31. Status:=OCIStmtPrepare (stmtSelecthp;errhp;$SQL_statement;OCI_DEFAULT )

32. `--------------------------------------------

33. ` CONDITION 2 : SQLT_LBI for LONG RAW

34. ` CONDITION 3 : OCI_DYNAMIC_FETCH instead of OCI_DEFAULT

35. Status:=OCIDefineByPos (stmtSelecthp;vDefine;errhp;1;->ZeBlob;SQLT_LBI ;vp_Null1;

36. ->ReadLength;vp_Null3;OCI_DYNAMIC_FETCH )

37. `--------------------------------------------

38. $status:=OCIErrorGet (errhp;1;$errornum;$errorexplain)

39. Si ($errornum#0)

40. ALERTE(Chaine($errornum)+Caractere(13)+$errorexplain)

41. Fin de si

42. Repeter

43. Status:=OCIStmtExecute (svchp;stmtSelecthp;errhp;1;0;0;0;OCI_DEFAULT )

44. Jusque (Status#OCI_STILL_EXECUTING )

45. Status:=OCIHandleFree (stmtSelecthp)

46. Fin de si

48. `supprimer les 8 premiers caractères si l'image a été insérée avec 4D for Oracle

49. SUPPRIMER DANS BLOB(ZeBlob;0;8)

51. Si (ReadLength>0)

52. $DocRef:=Creer document("longraw_image.jpg")

53. Si (OK=1)

54. FERMER DOCUMENT($DocRef)

55. BLOB VERS DOCUMENT(Document;ZeBlob)

56. Fin de si

57. Sinon

58. ALERTE("Taille du blob : zero !")

59. Fin de si

61. Status:=OCIHandleFree (stmthp)

62. Status:=OCILogoff (svchp;errhp)

63. Status:=OCIHandleFree (errhp)

64. Status:=OCICleanUp (envhp)

66. FIXER TAILLE BLOB(ZeBlob;0) `empty blob

68. `fin de methode