ORA-22922: 不存在的 LOB 值

今天开发报表遇到了ORA-22922: 不存在的 LOB 值问题,原因是用了wm_concat函数,转换后是clob类型,导致报表查询时报错。
后来改为使用listagg函数替代,完美解决问题,同时网上还有一种解决方法。新建一个自定义函数。

保存一下这个自定义函数
列转行的函数:

create or replace TYPE zh_concat_im
AUTHID CURRENT_USER AS OBJECT
(
  CURR_STR VARCHAR2(32767),
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,
               P1 IN VARCHAR2) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,
                                 RETURNVALUE OUT VARCHAR2,
                                 FLAGS IN NUMBER)
                     RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,
                    SCTX2 IN  zh_concat_im) RETURN NUMBER
);
/
create or replace TYPE BODY zh_concat_im
IS
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im)
  RETURN NUMBER
  IS
  BEGIN
    SCTX := zh_concat_im(NULL) ;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,
          P1 IN VARCHAR2)
  RETURN NUMBER
  IS
  BEGIN
    IF(CURR_STR IS NOT NULL) THEN
      CURR_STR := CURR_STR || ‘:‘ || P1;
    ELSE
      CURR_STR := P1;
    END IF;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,
                                 RETURNVALUE OUT VARCHAR2,
                                 FLAGS IN NUMBER)
    RETURN NUMBER
  IS
  BEGIN
    RETURNVALUE := CURR_STR ;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,
                                   SCTX2 IN zh_concat_im)
  RETURN NUMBER
  IS
  BEGIN
    IF(SCTX2.CURR_STR IS NOT NULL) THEN
      SELF.CURR_STR := SELF.CURR_STR || ‘:‘ || SCTX2.CURR_STR ;
    END IF;
    RETURN ODCICONST.SUCCESS;
  END;
END;
/

函数:
create or replace FUNCTION zh_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;
/

时间: 2024-10-25 20:30:50

ORA-22922: 不存在的 LOB 值的相关文章

java.io.IOException: ORA-22920: 未锁定含有 LOB 值的行

究其原因是因为没有锁定要更新的行记录.将 mysql="select filebody from filelist where filename=?"中的SQL语句加上 for update即可.如:mysql="select filebody from filelist where filename=? for update". 昨天测weblogic试连接池情况,多次刷新,连接不释放,然后查代码,连接的地方都在finally里边关掉了啊,还是不释放,突然想起sq

ORA-22922: 不存在的 LOB 值 可以使用外层嵌套wm_concat()解决

select kw0408id, sjbh, ksrs, kch, to_char(wm_concat(kcmc)) as kcmc, ksxs, kssc, ksfs, kcxz, xsyx, nj from (select a.kw0408id, a.sjbh, a.ksrs, kch, kcmc, to_char(wm_concat(distinct KSXS.DMMC)) as ksxs, to_char(wm_concat(distinct kssjcd.dmmc)) as kssc,

ORACLE无法调整SGA_TARGET值的案例记录

在一数据库版本为(标准版)Oracle Database 10g Release 10.2.0.4.0 - 64bit Production 的服务器上调整 sga_target时,遇到命令执行了非常久都没有执行完成的异常情况,觉得非常诧异.不解,因为一般调整sga_targt命令非常快速,检查了告警日志,并没有任何异常错误,等了好几分钟都没有执行完成,于是执行了CTRL+C命令结束了SQL命令,具体过程如下: $ sqlplus / as sysdba   SQL*Plus: Release

LOB类型的学习、总结

LOB相关的概念 LOB类型: 将信息文件(十进制.二进制).图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据. 有两种Lob,Internal Lob和External Lob.Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中. CLOB:????????存储大量.单字节.字符数据,存储在内部表空间,用于存储字符串类型的Lob,如文本和XML文件等,字符串已数据库字符集编码. NLOB:??

java_db2错误码对应值

DB2-SQLSTATE消息 2012-08-27 10:35:27|  分类: db2|举报|字号 订阅 本节列示 SQLSTATE 及其含义.SQLSTATE 是按类代码进行分组的:对于子代码,请参阅相应的表. 表 2. SQLSTATE 类代码 类 代码 含义 要获得子代码, 参阅... 00 完全成功完成 表 3 01 警告 表 4 02 无数据 表 5 07 动态 SQL 错误 表 6 08 连接异常 表 7 09 触发操作异常 表 8 0A 功能部件不受支持 表 9 0D 目标类型规

oracle lob 简单介绍

何为LOB? lob为oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关. 有那几种可供选择的LOB类型? 目前ORACLE提供了CLOB,NCLOB,BLOB,BFILE共四种LOB类型,CLOB,NLOB为大字符串类型,NLOB为多语言集字符类型,类似于NVARCHAR类型,用他们代替以前的LONG类型;BLOG为大二进制类型,用来代替以前的LONG RAW类型;BF

Oracle数据库中的大对象(LOB)数据类型介绍

一.LOB数据类型的介绍 大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档.图形图像.视频片段.声音文件和XML文件等.DMBS_LOB 包被设计用于操作 LOB 数据类型.从 Oracle 12c 开始,根据数据库块大小,LOB 最大可以存储 128TB 的数据,一个表可以有一个或多个 LOB 数据类型的列,如 二进制大对象(BLOB).字符大对象(CLOB).国家字符大对象(NCLOB)和BFILE. 重要的是,每当在表中创建 LOB 列时,实际上会创建两个不同的段:

Oracle LOB类型

一.Oracle中的varchar2类型1.我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同.2.在Oracle Database中,VARCHAR2 字段类型,最大值为4000:PL/SQL中 VARCHAR2 变量类型,最大字节长度为32767.3.当VARCHAR2容纳不下我们需要存储的信息时,就出来的Oracle的大数据类型LOB(La

Oracle Database 11g 体系结构

一.Oracle数据库结构 1.逻辑结构 1.1.数据块(Orale块):操作系统的存储系统中磁盘空间的一定数目字节组成.数据块是oracle数据库最小的逻辑部件.可定义为2K.4K.8K.16K.32K或者更大,通常称为Oralce块. Orale块的尺寸:在初始文件init.ora中的DB_BLOCK_SIZE参数设置.是处理oracle更新.选择.和插入数据库事务的最小单位(可认为等同于sql server的页).操作系统也有一个磁盘块的尺寸,所以理想情况下数据块的大小应该是磁盘块大小的倍