当前位置:  数据库>oracle

使用存储过程读取Oracle中的clob字段的数据

    来源: 互联网  发布时间:2017-03-30

    本文导语: 在做数据库开发的时候,有时候会遇到需要读取Oracle数据库中的clob类型的数据的情况。本着代码复用的目的,我写了下面的存储过程:读取数据库中clob字段的数据。希望跟大家交流一下。 CREATE OR REPLACE PROCEDURE prc_read_clob(  table_...

在做数据库开发的时候,有时候会遇到需要读取Oracle数据库中的clob类型的数据的情况。本着代码复用的目的,我写了下面的存储过程:读取数据库中clob字段的数据。希望跟大家交流一下。

CREATE OR REPLACE PROCEDURE prc_read_clob(
  table_name IN VARCHAR2,
  clob_column_name IN VARCHAR2,
  primary_Key_Column_names IN VARCHAR2,
  primary_key_values IN VARCHAR2,
  offset_i IN NUMBER,
  read_length_i IN NUMBER,
  RES OUT VARCHAR2,
  total_length OUT NUMBER
) AS
/**
  Autor:Hanks_gao.
  Create Date:2008/12/10
  Description:This procedure is to read clob value by conditions
  --------------------------------------------------------------
  -----------------Parameters descritption----------------------
                table_name : The table that contains clob/blob columns(表名)
        clob_column_name : Clob/blob column name of table_name(类型为clob的字段名)
primary_key_column_names : The columns seperated by '}' that can fix only one row data (that is primary key) (主键名,以'}'分隔的字符串)
        primary_key_values : The primary keyes values that seperated by '}'(主键键值,以'}'分隔的字符串)
                  offset_i : The offset of reading clob data(要读取的位移量)
             read_length_i : The length of reading clob data per times(要读取的长度)
                       res : Return value that can be referenced by application(读取的结果)
              total_length : The total length of readed clob data(数据库查询到的clob数据的总长度)
  -----------------End Parameters descritption------------------
*/
























  tmpPrimaryKeys VARCHAR2(2000);  --To save primary_Key_Column_names temporarily(暂存主键,主键是以'}'分隔的字符串)
  tmpPrimaryKeyValues VARCHAR2(2000);  --To save primary_key_values temporarily(暂存主键键值,以'}'分隔的字符串)
  i NUMBER;  --循环控制变量
  tmpReadLength NUMBER; --暂存要读取的长度
  sqlStr VARCHAR2(6000);  --Query string(查询字符串)
  sqlCon VARCHAR2(5000);  --Query condition(查询条件)




  TYPE tmparray IS TABLE OF VARCHAR2(5000) INDEX BY BINARY_INTEGER;
    arrayPrimaryKeys  tmparray;  --To save the analyse result of primary_Key_Column_names (暂存分析后得到的主键名)
    arrayPrimaryKeyValues  tmparray;  --To save the analyse result of primary_key_values(暂存分析后得到的主键键值)
BEGIN
  total_length := 0;
  RES := '';
  DECLARE
    clobvar CLOB := EMPTY_CLOB;
  BEGIN
    tmpPrimaryKeys:=primary_Key_Column_names;
    tmpPrimaryKeyValues:=primary_key_values;









    i:=0;
    WHILE INSTR(tmpPrimaryKeys,'}')>0 LOOP --Analyse the column names of primary key(将主键分开,相当于arrayPrimaryKeys =tmpPrimaryKeys.split("}") )
      arrayPrimaryKeys(i):=subSTR(tmpPrimaryKeys,1,(INSTR(tmpPrimaryKeys,'}')-1));
      tmpPrimaryKeys:=subSTR(tmpPrimaryKeys,(INSTR(tmpPrimaryKeys,'}')+1));
      i:=i+1;
    END LOOP;




    i:=0;
    WHILE INSTR(tmpPrimaryKeyValues,'}')>0 LOOP --Analyse the values of primary key
      arrayPrimaryKeyValues(i):=subSTR(tmpPrimaryKeyValues,1,(INSTR(tmpPrimaryKeyValues,'}')-1));
      tmpPrimaryKeyValues:=subSTR(tmpPrimaryKeyValues,(INSTR(tmpPrimaryKeyValues,'}')+1));
      i:=i+1;
    END LOOP;




    IF arrayPrimaryKeys.COUNT()arrayPrimaryKeyValues.COUNT() THEN  --判断键与键值是否能匹配起来
      res:='KEY-VALUE NOT MATCH';
      RETURN;
    END IF;


    i := 0;
    sqlCon  := '';
    WHILE i < arrayPrimaryKeys.COUNT() LOOP
      sqlCon := sqlCon || ' AND ' || arrayPrimaryKeys(i) || '='''
              || replace(arrayPrimaryKeyValues(i),'''','''''') || '''';
      i := i + 1;
    END LOOP;





    sqlStr := 'SELECT ' || clob_column_name || ' FROM ' || table_name
        || ' WHERE 1=1 ' || sqlCon || ' AND ROWNUM = 1' ;  --组查询字符串


    dbms_lob.createtemporary(clobvar, TRUE);
    dbms_lob.OPEN(clobvar, dbms_lob.lob_readwrite);

    EXECUTE IMMEDIATE TRIM(sqlStr) INTO clobvar;  --执行查询
   
    IF offset_i


    
 
 

您可能感兴趣的文章:

  • 类的方法和实例方法,类字段和实例字段有什么不同,在使用上?
  • 使用PreparedStatement向表插入数据的时候,如果一个字段是自动增长的,应该怎么办呀???
  • MySQL可以使用斜线来当字段的名字
  • linux 下使用 FREETDS 访问数据库 image 字段的问题, 仅能读取 64K ,超出部分读取不到?
  • linux上使用C++如何处理utf-8编码的字段
  • SQL SERVER使用REPLACE将某一列字段中的某个值替换为其他的值
  • c#只读字段和常量的区别,以及静态构造函数的使用实例
  • 使用sql语句在指定字段前面插入新的字段的方法
  • MYSQL中有关SUM字段按条件统计使用IF函数(case)问题
  • mysql中insert与select的嵌套使用解决组合字段插入问题
  • c语言中位字段与结构联合的组合使用详解
  • oracle关键字作为字段名使用方法
  • oracle使用sql语句增加字段示例(sql删除字段语句)
  • Hibernate,Oracle视图中字段小数点位数使用注意
  • 求一个使用tcp协议传送类似数据库表的二维数组的例子。每条记录上的字段数据类型不一定一样。
  • 请问SHELL中有能根据模式直接抽取指定字段的内置命令吗?不能使用awk等工具的!
  • 解析如何使用反射调用类型成员 方法,字段,属性
  • oracle 使用sql获取数据库表、表的字段的多种方法
  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法
  • 在MySQL字段中使用逗号分隔符的方法分享
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在ACC下不使用循环怎样实现,读取文件指定行的数据.
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 使用shell读取XML文件信息
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 为什么使用cat输出的文本文件是中文的,使用java从文件读取出来时显示的是乱码?
  • java中使用URL类,读取服务器上的文件返回的中文为什么是乱码?
  • 请教如何使用awk从文件中读取十六进制列的问题
  • linux gdb 没有符号表被读取。请使用 "file" 命令。
  • 使用linq to xml修改app.config示例(linq读取xml)
  • 使用xmltextreader对象读取xml文档示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java将类序列化并存储到mysql(使用hibernate)
  • 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
  • 使用Statement.java里的execute执行存储过程问题
  • 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
  • 关于共享存储段的使用,求助高手
  • linux下怎样使用usb移动存储设备?
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • 关于如何使用shell自动执行一个sybase的存储过程
  • 急!50分!我现在想要在VECTOR中直接存储结果集???但不想使用"在VECTOR中存储一个
  • 使用存储过程实现循环插入100条记录
  • solaris上的C程序,编译报错: 存储类只能使用register,奇怪,奇怪!
  • php使用curl存储cookie的示例
  • Fedora10 命令行下如何使用 USB 存储设备
  • UNIX中使用putenv需要创建字符串存储空间,而且是只能在本进程中才有用
  • 对象序列化--存储数据库的方法 序列化后 不能使用
  • 想搞嵌入式驱动的开发,请大虾给个简单例程(通过SPI读写外扩存储芯片),以及开发步骤及应注意的地方,怎么加入内核和使用该驱动?谢谢
  • mysql存储过程中使用游标的实例
  • 请问怎样在调用存储过程时使用setArray方法?
  • sql server 存储过程使用 IF ELSE 的例子
  • MySQL 存储过程和"Cursor"的使用方法
  • 使用prepareCall调用存储过程,传送了TYPE_SCROLL_INSENSITIVE参数,但仍然无法实现分页功能.
  • Python不使用print而直接输出二进制字符串
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • Office 2010 Module模式下使用VBA Addressof
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • c#中SAPI使用总结——SpVoice的使用方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3