`

ORACLE 函数处理的数据返回值过长 character string buffer too small .

阅读更多

--问题

-- ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
--ORA-06512: 在 "WMSYS.WM_CONCAT_IMPL", line 30

 

--错误   WMSYS.WM_CONCAT()

 SELECT   HEAD.BOOKING_HEAD_ID,
           (SELECT   REPLACE
                     (
                       WMSYS.WM_CONCAT(   CONTAINER.CONTAINER_NO    --这里改用 F_LINK_LOB(.) 处理 

                                   || '/'
                                   || SEAL_NO_1
                                   || '/'
                                   || CONTAINER_TYPE
                                   || '/'
                                   || DECODE (CONTAINER_STATUS_I, 4, 'E', 7, 'L', 'F')),
                        ',',
                        CHR (10)
                     )
              FROM   DOC_BK_CONTAINER CONTAINER
             WHERE   HEAD.BOOKING_HEAD_ID = CONTAINER.BOOKING_HEAD_ID)
              AS CONTAINERS_BOX_INFO
    FROM   DOC_BOOKING_HEAD HEAD
   WHERE   HEAD.BOOKING_HEAD_ID = '2c2881d62e50c1c1012e5573b63e54c2'
ORDER BY   HEAD.BL_NO;

 

  --方法  F_LINK_LOB

CREATE OR REPLACE FUNCTION  F_LINK_LOB (P_STR VARCHAR2)
   RETURN CLOB
 AGGREGATE USING T_LINK_LOB;


--类型T_LINK_LOB

CREATE OR REPLACE TYPE "T_LINK_LOB"
AS
   OBJECT
   (
      V_LOB CLOB,
      STATIC FUNCTION ODCIAGGREGATEINITIALIZE (SCTX IN OUT NOCOPY T_LINK_LOB)
      RETURN NUMBER,
      MEMBER FUNCTION ODCIAGGREGATEITERATE (SELF IN OUT NOCOPY T_LINK_LOB, VALUE IN VARCHAR2)
         RETURN NUMBER,
      MEMBER FUNCTION ODCIAGGREGATETERMINATE
      (
         SELF          IN            T_LINK_LOB,
         RETURNVALUE      OUT NOCOPY CLOB,
         FLAGS         IN            NUMBER
      )
         RETURN NUMBER,
      MEMBER FUNCTION ODCIAGGREGATEMERGE (SELF IN OUT NOCOPY T_LINK_LOB, CTX2 IN T_LINK_LOB)
         RETURN NUMBER
   )

CREATE OR REPLACE TYPE BODY T_LINK_LOB
IS
   STATIC FUNCTION ODCIAGGREGATEINITIALIZE (SCTX IN OUT NOCOPY T_LINK_LOB)
      RETURN NUMBER
   IS
   BEGIN
      SCTX := T_LINK_LOB (NULL);
      DBMS_LOB.CREATETEMPORARY (SCTX.V_LOB, TRUE, DBMS_LOB.SESSION);
      DBMS_LOB.OPEN (SCTX.V_LOB, DBMS_LOB.LOB_READWRITE);
      RETURN ODCICONST.SUCCESS;
   END;

   MEMBER FUNCTION ODCIAGGREGATEITERATE (SELF IN OUT NOCOPY T_LINK_LOB, VALUE IN VARCHAR2)
      RETURN NUMBER
   IS
   BEGIN
      DBMS_LOB.WRITEAPPEND (SELF.V_LOB, LENGTH (VALUE) + 1, VALUE || ',');
      RETURN ODCICONST.SUCCESS;
   END;

   MEMBER FUNCTION ODCIAGGREGATETERMINATE
   (
      SELF          IN            T_LINK_LOB,
      RETURNVALUE      OUT NOCOPY CLOB,
      FLAGS         IN            NUMBER
   )
      RETURN NUMBER
   IS
   BEGIN
      DBMS_LOB.CREATETEMPORARY (RETURNVALUE, TRUE, DBMS_LOB.CALL);
      DBMS_LOB.COPY (RETURNVALUE, SELF.V_LOB, DBMS_LOB.GETLENGTH (SELF.V_LOB) - 1);
      RETURN ODCICONST.SUCCESS;
   END;

   MEMBER FUNCTION ODCIAGGREGATEMERGE (SELF IN OUT NOCOPY T_LINK_LOB, CTX2 IN T_LINK_LOB)
      RETURN NUMBER
   IS
   BEGIN
      NULL;
      RETURN ODCICONST.SUCCESS;
   END;
END;

分享到:
评论

相关推荐

    oracle函数大全(CHM格式).rar

    在Oracle数据库中,函数扮演着至关重要的角色,它们允许用户进行复杂的计算、数据处理和信息提取。"Oracle函数大全(CHM格式).rar"这个压缩包显然包含了关于Oracle数据库中各种函数的详细信息,对于学习和查询...

    oracle 函数大全 参考函数 手册 速查 chm格式

    Oracle函数是数据库操作中的核心组成部分,它们允许开发人员和DBA执行各种计算、转换、查询和数据处理任务。手册中可能涵盖了以下几类函数: 1. 数学函数:如ABS(取绝对值)、MOD(取模)、ROUND(四舍五入)等,...

    oracle函数大全.chm

    oracle函数大全.chm oracle函数大全.chm

    Oracle函数.chm

    Oracle函数.chm

    oracle函数大全 oracle函数大全

    Oracle数据库系统提供了丰富的内置函数,这些函数用于处理各种数据类型,包括字符串、数值以及日期等。以下是关于Oracle函数的一些详细说明: 1. ASCII函数:ASCII函数返回与输入字符相对应的ASCII码,即十进制数字...

    Java调用oracle函数返回oracle类(类似)集合

    在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...

    ORACLE中CLOB字段转String类型

    在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何其他大型文本内容。然而,在处理CLOB...

    Oracle函数手册.rar

    手册中会详细解释每个函数的语法、参数、返回值以及使用示例,帮助用户在实际工作中更高效地处理数据和编写SQL查询。 通过深入阅读"Oracle函数手册",不仅可以了解函数的基本用法,还能学习到如何结合这些函数解决...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以支持复杂的查询和数据操作。这份"oracle函数大全(分类显示).zip"压缩包显然是一份详细的Oracle函数参考手册,对于初学者而言,是一个...

    Oracle函数大全-详细介绍.rar

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的函数集,以支持复杂的查询和数据处理。在"Oracle函数大全-详细介绍.rar"这个压缩包中,包含了对Oracle数据库中各种函数的详细解析,包括分析函数、...

    hive和oracle函数对照表.xlsx

    包含hive和oracle的常用函数对比关系表,可以用于查询hive函数转换成oracle函数,或者oracle函数转换hive函数之间的相互转换。

    hibernate 调用oracle函数

    本文将深入探讨如何在Hibernate中调用Oracle的函数,以实现高效的数据操作。 首先,我们需要理解Hibernate的核心理念,它允许开发者通过面向对象的方式来处理数据库操作,而无需编写大量的SQL语句。Hibernate通过...

    Oracle 函数大全.txt

    ### Oracle函数详解 #### 1. ASCII - **功能**:返回指定字符的ASCII值。 - **语法**:ASCII(char) - **示例**: ```sql SQL> SELECT ASCII('A') AS "ASCII Value" FROM DUAL; ASCII Value ----------- 65 ``...

    Java调用Oracle的过程和函数

    为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来调用Oracle数据库中的函数,并特别关注带有不同类型的输入(in)、输出(out)及输入输出(in/...

    oracle函数大全

    Oracle数据库是业界广泛使用的关系型数据库系统,它提供了丰富多样的函数,用于处理数据、执行计算、格式化输出等任务。本知识点集合将详细介绍Oracle数据库中提供的各种函数及其使用方法,从而帮助开发者在进行...

    oracle 创建wm_concat函数

    2. **迭代函数(ODCIAggregateIterate)**:每当处理一行数据时都会调用此函数。在这个函数中,我们检查`sum_string`是否为空,如果不为空,则将新值附加到现有的字符串后面,并以逗号分隔;如果为空,则直接将新值...

    ORACLE函数大全.zip

    在Oracle中,函数扮演着至关重要的角色,它们用于处理数据、执行计算以及进行各种复杂操作。"ORACLE函数大全.zip"这个压缩包文件很可能包含了对Oracle数据库系统中各种函数的详细说明,包括其属性、用法和功能。下面...

    postgresql 兼容 oracle 函数

    1. **日期和时间函数**:Oracle中的ADD_MONTHS、LAST_DAY、NEXT_DAY等在orafce中都有对应的实现,帮助用户处理日期和时间数据。 2. **字符串函数**:诸如 INITCAP、SUBSTR、INSTR等在PostgreSQL中也有相应的实现,...

    ORACLE函数大全CHM

    1. **数值函数**:这些函数处理数值数据,如`ABS()`返回绝对值,`ROUND()`进行四舍五入,`MOD()`计算余数,`SQRT()`求平方根等。 2. **字符串函数**:处理字符数据,如`CONCAT()`连接字符串,`SUBSTR()`截取子串,`...

Global site tag (gtag.js) - Google Analytics