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

Oracle Database 11g Enterprise Edition 11.2.0.4.0版中的STRAGG-64位生产

井翰
2023-03-14

我想在此环境中使用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的视图

LOGIN   DESC      

joanet  BS in ANDROID.C.3
joanet  DOB in ANDROID.C.3
joanet  DO in ANDROID.C.3
joanet  BS in ANDROID.C.4
joanet  UA in ANDROID.C.4
joanet  OV in ANDROID.C.4
joanet  OI in ANDROID.C.4
joanet  DO in ANDROID.C.4
joanet  DHoU in ANDROID.C.4
joanet  AOP in ANDROID.C.4

执行此查询

select
  login ,
  sys.STRAGG( UNIT_ROLE_DESC || ' - ' ) as string
from
  V_USER_ROLE_DESC
where login = 'joanet'
group by
  login
;

这就是结果:

joanet  BS in ANDROID.C.3 - DOB in ANDROID.C.3 - DO in ANDROID.C.3 - BS in ANDROID.C.4 - UA in ANDROID.C.4 - OV in ANDROID.C.4 - OI in ANDROID.C.4 - DO in ANDROID.C.4 - DHoU in ANDROID.C.4 - AOP in ANDROID.C.4 - 

但是没有where子句。。。

   select
      login ,
      sys.STRAGG( UNIT_ROLE_DESC || ' - ' ) as string
    from
      V_USER_ROLE_DESC
    --where login = 'joanet'
    group by
      login
    ;

这就是结果:

...
colau   DOB in ANDROID.D.2 - 
joanet  DOB in ANDROID.D.2 - 
sisa    DOB in ANDROID.D.2 - 
...

使用

SELECT login ,listagg(unit_role_desc,' - ') WITHIN GROUP (ORDER BY unit_role_desc) AS STRING FROM v_user_role_desc WHERE 1=1 GROUP BY LOGIN;

我有这个错误

ORA-01489:字符串串联的结果太长

共有1个答案

白念
2023-03-14

我建议使用Listag而不是STRAGG。Listag的优势在于它允许指定聚合项目的顺序。

SELECT login
      ,listagg(unit_role_desc,' - ')  WITHIN GROUP (ORDER BY unit_role_desc) AS STRING
  FROM v_user_role_desc
 WHERE 1=1
-- AND login = 'joanet'
 GROUP BY LOGIN;

另请参阅一个工作示例:

WITH
 v_user_role_desc AS (
 SELECT 'sisa' login
        ,'BS in ANDROID.C.3' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
 SELECT 'sisa' login
        ,NULL UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
 SELECT 'joanet' login
        ,'BS in ANDROID.C.3' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'DOB in ANDROID.C.3' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'DO in ANDROID.C.3' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'BS in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'UA in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'OV in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'OI in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'DO in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'DHoU in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual
  UNION ALL
  SELECT 'joanet' login
        ,'AOP in ANDROID.C.4' UNIT_ROLE_DESC 
    FROM dual) 
SELECT login
      ,listagg(unit_role_desc,' - ')  WITHIN GROUP (ORDER BY unit_role_desc) AS STRING
  FROM v_user_role_desc
 WHERE 1=1
-- AND login = 'joanet'
 GROUP BY LOGIN;
 类似资料:
  • 问题内容: 我注意到Sun提供了64位版本的Java。它的性能是否比32位版本好? 问题答案: 定义您的工作量以及“表现”对您的意义。 作为一个长期存在的表现极客,这对我来说是种烦恼。特定更改是否“执行得更好”,首先取决于工作量,即您要程序执行的工作。 64位Java通常会在计算量很大的情况下表现更好。Java程序通常具有沉重的I / O负载和沉重的网络负载。64位和32位可能无关紧要,但是操作系

  • 我在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-生产中运行此查询 但我有一个错误: 即使我设置了所有这些变量:

  • 我使用SIMD创建了一个64位*64位到128位的函数。目前我已经使用SSE2(实际上是SSE4.1)实现了它。这意味着它同时生产两个64b*64b到128b的产品。同样的想法可以扩展到AVX2或AVX512,同时提供四个或八个64b*64到128b的产品。我的算法基于http://www.hackersdelight.org/hdcodetxt/muldws.c.txt 该算法执行一次无符号乘法

  • 在Delphi XE7 64位VCL程序中,找不到单元: 而它在32位程序中没有问题: 那么如何在64位程序中使用呢?

  • 问题内容: 要启动旧版应用程序,我们通过jnlp使用Java WebStart。 我们希望支持64位Java客户端,但是我们的库之一是依赖于体系结构的。 我们想到做类似的事情: 这是行不通的,因为参数sun.arch.data.model =“ 64”用于设置参数而不是对其进行测试。 有任何想法吗? 问题答案: 在文档中对此进行了解释,位于:http : //docs.oracle.com/jav

  • 问题内容: 在64位计算机上,Java中的int大小是32位还是64位? 问题答案: 32位。这是Java语言的功能之一,整数的大小不会随基础计算机而变化。请参阅规范的相关部分。