当前位置: 首页 > 知识库问答 >
问题:

ORA-01489: Oracle Database 11g企业版版本中字符串连接的结果太长11.2.0.4.0-64位生产

刁跃
2023-03-14

我在Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位生产、PL/SQL 11.2.0.4.0-生产、CORE 11.2.0.4.0生产、TNS for Linux 11.2.0.4.0-生产、NLSRTL 11.2.0.4.0-生产中运行此查询

  CREATE OR REPLACE FORCE VIEW "IOT"."V_USERS_AND_RIGHTS" ("USER_PRIMARY_UNIT", "LOGIN", "FIRST_NAME", "LAST_NAME", "UNIT_ROLE") AS 
  SELECT "USER_PRIMARY_UNIT","LOGIN","FIRST_NAME","LAST_NAME","UNIT_ROLE"
FROM (
SELECT user_primary_unit,login, first_name,  last_name,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(rights,' / '))
       KEEP (DENSE_RANK LAST ORDER BY curr),' / ') AS UNIT_ROLE
      FROM  
        (SELECT  login,
              first_name,  
              last_name,
              user_primary_unit,
              rights,
              ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) AS curr,
              ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) -1 AS prev
        FROM  (select   member0_.login,  member0_.first_name first_name, unit2.unit_name user_primary_unit,  member0_.last_name last_name,
                        CONCAT(CONCAT(unit.unit_name, ' - '), role3_.role_name) rights 
 from
  IOT_DEVICES.t_member member0_
 inner join  IOT_DEVICES.t_user member0_1_    on member0_.member_id=member0_1_.user_id
 inner join  IOT_DEVICES.t_playable_role playedrole1_    on member0_.member_id=playedrole1_.user_id
 inner join  IOT_DEVICES.t_unit_role unitrole2_    on playedrole1_.unit_role_id=unitrole2_.unit_role_id
 inner join  IOT_DEVICES.t_role role3_    on unitrole2_.role_id=role3_.role_id
 inner join  IOT_DEVICES.t_unit unit    on unitrole2_.unit_id=unit.unit_id
 inner join  IOT_DEVICES.t_unit unit2    on unit2.unit_id=member0_1_.primary_unit_id
 where    current_date between playedrole1_.start_date and playedrole1_.end_date
 order by unit.unit_name
  ))
GROUP BY login, first_name,  last_name, user_primary_unit
CONNECT BY prev = PRIOR curr AND login = PRIOR login
START WITH curr = 1
)
ORDER BY user_PRIMARY_UNIT, FIRST_NAME, LAST_NAME;

但我有一个错误:

ORA-01489: result of string concatenation is too long
01489. 00000 -  "result of string concatenation is too long"
*Cause:    String concatenation result is more than the maximum size.
*Action:   Make sure that the result is less than the maximum size.

即使我设置了所有这些变量:

SET LONG 2000000
SET pagesize 50000
set longchunk 1000
set linesize 1000

共有1个答案

程正阳
2023-03-14

该错误与sqlplus设置无关,而是与Oracle DB中SQL引擎中的varchar2大小限制有关。对于11g,限制为4000字节。

处理查询时,其中一个串联会导致字符串长度超过限制。

乍一看

... LTRIM(MAX(SYS_CONNECT_BY_PATH(rights,' / ')) ...

... CONCAT(CONCAT(unit.unit_name, ' - '), role3_.role_name) rights ...

可能会导致这个问题。要么你对一个单位有很多权利,要么你有很深的层次结构。

 类似资料:
  • 我想在此环境中使用STRAGG函数:Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产,PL/SQL 11.2.0.4.0版-生产,CORE 11.2.0.4.0生产,TNS for Linux:11.2.0.4.0版-生产,NLSRTL 11.2.0.4.0版-生产: 我有一个名为V\u USER\u ROLE\u DESC的视图 执

  • 问题内容: 我正在使用Oracle SQL开发人员版本3.0.04。我试图使用该功能将数据分组在一起。 但是,我不断收到错误消息, 我很确定输出可能会超过4000,因为这里提到的WEB_LINK是url stem和url query的串联值。 有没有解决的办法,或者还有其他选择吗? 问题答案: 由于聚合字符串的长度可以超过4000个字节,因此不能使用该函数。您可能会创建一个用户定义的集合函数,该函

  • 问题内容: 我正在尝试通过运行以下sql创建表视图 但我得到以下 ORA-01489:字符串连接的结果太长01489。00000-“字符串连接的结果太长” 原因:字符串连接的结果大于最大大小。操作:确保结果小于最大大小。 我抬起头,发现了使用to_clob的建议,但仍引发此错误。我正在使用oracle 11g。我在这里先向您的帮助表示感谢。 问题答案: LISTAGG中最长的串联字符串可以是400

  • 该软件官网已不存在 cacti中文企业版 本系统采用liunx与cacti集成,安装配置简单。 使用方法: root密码:CactiEZ cacti登录密码:admin 第一次登录强制更改密码 集成了我们最常用的插件,省去了我们自行安装的麻烦。 登录以后点击:用户管理——admin------区域------所有打钩特别说明: 此版本为目前网上最稳定版本,简单易用,插件非常的全!足以应付我们日常的

  • 出于隐私或法律原因而不能将代码托管到第三方平台的企业,可能希望在企业内部架设专有的GitHub服务,能做到么?答案就是GitHub企业版(GitHub Enterprise)。 网址:https://enterprise.github.com/。 GitHub企业版搭建在企业本地网络中,因此企业拥有对版本库和项目完整的控制权限。GitHub企业版包含了GitHub上所有的好东西:提交历史、代码浏览

  • 一、简介 黄页企业所使用模版的添加、修改、及管理。 二、添加黄页企业模版 企业模版的位置是: phpcms\templates\default\yp\com_default(com_default:为企业模版名称) 二、企业模版管理 三、企业模版的权限设置