当前位置: 首页 > 面试题库 >

通过Oracle串联

宰父深
2023-03-14
问题内容

这是一个样本表数据

Fruit   Number
Apple    1
Apple    2
Apple    3
Kiwi     6
Kiwi     10

我尝试连接表列值以获取以下内容

Fruit   Number
Apple    1-2-3
Kiwi     6-10

有没有办法查询此或存储过程?像Concatenate over(partition by)之类的东西,我对存储过程了解不多。谢谢!


问题答案:

OP在Oracle 10g上运行 ,而 LISTAGG11g第2版 中引入。

因此,在Oracle版本 11克之前, 那里LISTAGG是不支持,你可以使用 ROW_NUMBER()
SYS_CONNECT_BY_PATH 功能。

SELECT fruit,
  LTRIM(MAX(SYS_CONNECT_BY_PATH(number,','))
  KEEP (DENSE_RANK LAST ORDER BY curr),',') AS fruits_agg
  FROM   (SELECT fruit,
                number,
                ROW_NUMBER() OVER (PARTITION BY fruit ORDER BY number) AS curr,
                ROW_NUMBER() OVER (PARTITION BY fruit ORDER BY number) -1 AS prev
         FROM   table_name)
  GROUP BY fruit
  CONNECT BY prev = PRIOR curr AND fruit = PRIOR fruit
 START WITH curr = 1;

笔记

切勿使用,WM_CONCAT因为它是未记录的功能,并且已从12c版本中删除。

曾经依赖wm_concat功能的任何应用程序一旦升级到,都将无法工作12c。从那以后,它已被删除。请参阅为什么不在Oracle中使用WM_CONCAT函数?

SQL> select banner from v$version where rownum = 1;

BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

SQL> SELECT object_name
  2  FROM dba_objects
  3  WHERE owner='WMSYS'
  4  AND object_name LIKE 'WM\_%' ESCAPE '\';

OBJECT_NAME
----------------------------------------------------------------------------
WM_REPLICATION_INFO
WM_RDIFF
WM_PERIOD
WM_PERIOD
WM_OVERLAPS
WM_MEETS
WM_LESSTHAN
WM_LDIFF
WM_INTERSECTION
WM_INSTALLATION
WM_GREATERTHAN
WM_EVENTS_INFO
WM_ERROR
WM_ERROR
WM_EQUALS
WM_DDL_UTIL
WM_DDL_UTIL
WM_CONTAINS
WM_COMPRESS_BATCH_SIZES
WM_COMPRESSIBLE_TABLES

20 rows selected.

SQL>

您将收到`` 无效标识符 ‘’错误:

SQL> SELECT banner FROM v$version;

BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE    12.1.0.1.0      Production
TNS for 64-bit Windows: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production

SQL> SELECT deptno, wm_concat(ename) FROM emp;
SELECT deptno, wm_concat(ename) FROM emp
               *
ERROR at line 1:
ORA-00904: "WM_CONCAT": invalid identifier

因此,没有必要依赖 未记录的功能 ,而该 功能 在最新版本中不再可用。



 类似资料:
  • 基于Oracle文档,我创建了一个钱包 添加凭证 在我的java应用程序中,我想通过这个钱包连接到数据库 但我不知道如何填充连接字符串。我不想使用tnsnames。谢谢

  • 我想通过R从SQL数据库导入数据。我尝试了太多次(几乎6小时)连接到服务器。我运行这些命令,它显示错误:- jdbcDriver jdbc连接 我认为是司机的问题,但我无法解决。

  • 这是我的代码: 如何根据爱好对学生进行分组。我尝试了以下代码: 它没有给出正确的答案。

  • 过程是一组可以按名称调用的PL/SQL语句。 调用规范指定java方法或第三代语言例程,以便可以从SQL和PL/SQL调用它。 创建过程 语法 以下是创建过程必须定义的三种类型的语句。 :这是一个默认参数,它将值传递给子程序。 :必须指定,它向调用者返回一个值。 :必须指定,它将初始值传递给子程序并将更新的值返回给调用者。 Oracle创建过程示例 在此示例中,将在表中插入记录,所以需要先创建表。

  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果

  • 我有一个Spring Boot应用程序,当它以经典的方式连接到Oracle实例时,它可以很顺利地工作: 但是,当我通过存储在本地驱动器“C:\Oracle\Client11g\Network\Admin”中的TNSnames.ora转到tns连接时,有些东西不起作用,我会得到以下异常: 下面是我的application.properties+application-oracleprod.prope