我现在在C语言中用ProC操作Oracle数据库,简单看了一些ProC的资料,数据库连接、简单读写、事务、异常处理等都没多大问题,但对大二进制字段blob的读写一筹莫展。搜遍百度谷歌都没找到实用的参考,这里有没有哪位有这方面的经验,请指教一二。
由于以前多用SQL Server,Oracle刚接触不久,请不要讲得太高深,最好辅以代码,谢谢!
级别所限,只能给100分,请多包含哈!

解决方案 »

  1.   

    参考这个试试csdn以前的贴。
    http://topic.csdn.net/t/20060322/15/4632039.html
      

  2.   

    上面的例子是java的,有没有ProC语言的?
      

  3.   

    数据库版本是Oracle 9i,来个人给点建议嘛,一般是怎么做的,给个思路也行啊
      

  4.   


    你把c语言中 blob的直接换成varchar2(4000)试下看看吧!
      

  5.   

    ProC中不支持varchar2类型,只能用varchar[],我就是用的这个类型,下面是我的代码:int db_save(char *ID, char *content)
    {
    EXEC SQL WHENEVER SQLERROR GOTO error; EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR id[50], blob_content[4000];
    EXEC SQL END DECLARE SECTION;

    memset(id.arr, 0, sizeof(id.arr));
    memset(blob_content.arr, 0, sizeof(blob_content.arr));

    memcpy(id.arr, keyID, strlen(keyID));
    memcpy(blob_content.arr, content, strlen(content));

    id.len = (unsigned short)strlen((char *)id.arr);
    blob_content.len = (unsigned short)strlen((char *)blob_content.arr); EXEC SQL INSERT INTO MyTable(ID, BlobContent)
    VALUES(:id, :blob_content); printf("\n保存数据成功!");
    return 0;

    error :
    printf("\n保存数据错误!");
    return -1;
    }结果是不行。我想对于做过这方面的前辈,这个问题应该不是问题吧,谁给指导指导嘛
      

  6.   

    没人回复,我就自己跟帖了,把我的学习过程帖上来。
    刚查了一下,了解到一个概念——OCI,下面帖一下简单介绍(高手们别笑话,本人确是Oracle菜鸟,来这里丢人显眼了):    Oracle调用接口(Oracle Call Interface简称OCI)提供了一组可对Oracle数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取Oracle数据库的目的。
    在普通的情况下,用户可以通过SQL和PL/SQL来访问数据库中的数据。Oracle数据库除了提供SQL和PL/SQL来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、COBOL、FORTRAN等第三代语言来编程访问数据库。OCI就是为了实现高级语言访问数据库而提供的接口。OCI允许开发者在程序里使用SQL和PL/SQL来访问数据库。开发者可以使用第三代语言来编写程序,而使用OCI来访问数据库。
      OCI是一由一组应用程序开发接口(API)组成的,Oracle提供API的方式是提供一组库。这组库包含一系列的函数调用。这组函数包含了连接数据库、调用SQL和事务控制等。在安装DBMS SERVER或者客户端的时候,就安装了OCI。
      

  7.   

    在ORACLE数据库中,LOB(Large Objects—大对象)是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据)。目前,它又分为两种类型:内部 LOB和外部LOB。内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。Oracle8i支持三种类型的内部LOB:BLOB(二进制数据)、CLOB(单字节字符数据)、NCLOB(多字节国家字符数据)。其中CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、音频等。目前,Oracle8i只支持一种外部LOB类型,即BFILE类型。在数据库内,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而,该类型所表示的数据是只读的,不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。ORACL提供了多种使用和维护LOB的方式,如使用PL/SQL   DBMS_LOB包、调用OCI、使用Proc * C/C++、使用JDBC等。 
      

  8.   

    刚才问了一个同事,他说可以用考虑用dbms_lob包来试试。
      

  9.   

    找到了一个帖子,你参考参考:http://topic.csdn.net/t/20020704/10/848893.html
      

  10.   

    这个我刚刚也了解了一些,还没搞懂怎么用,下面是我找到的一篇博客:
    DBMS_LOB包使用和维护
      

  11.   

    我就是需要上面提到的“使用ProC * C/C++”的方式,有谁知道?
      

  12.   

    感觉这个和具体的程序开发语言有关。你试试在对应的proc的开发语言的板块问问。要是java还可以帮帮你。
      

  13.   

    晕,在百度里搜dbms_lob proc,居然搜到我自己的帖子里来了
      

  14.   

    始终还是解决了,使用的OCIBlobLocator,参考了这篇文章
    Read a File, WRITE a BLOB Example