下面是我的Oracle查询-
-- User-Defined TYPE
create or replace TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);
-- This works
select emp.DEPT_NAME,
CAST(
COLLECT(emp.EMP_ID || ':' || emp.EMP_JOIN_DATE)
AS varchar2_ntt) AS EMPS
from employee emp
group by emp.DEPT_NAME;
-- Output
DEPT_NAME EMPS
SALES TEST_DB.VARCHAR2_NTT('750127:20-JAN-23', '750228:20-JAN-23')
FINANCE TEST_DB.VARCHAR2_NTT('548834:10-JAN-19', '802850:14-MAR-23', '802849:19-OCT-23')
字符串
这个输出我想格式化如下
输出- TEST_DB.VARCHAR2_NTT(“548834:10-JAN-19”,“802850:14-MAR-23”,“802849:19-OCT-23”)
手术后- 548834:10-JAN-19,802850:14-MAR-23,802849:19-OCT-23
我试过使用regexp_substr
,但没有太大的成功。
1条答案
按热度按时间xzlaal3s1#
varchar2_ntt
是一个包含许多字符串的集合数据类型;它不是一个字符串数据类型,它是一个数组,并且它没有特定的格式。当您使用查询时,它会显示:
字符串
这是您正在使用的客户端应用程序(即SQL Developer,TOAD,Java等),以它认为您(用户)可以理解的方式显示集合数据类型。它不是由SQL语句控制的任何格式。
如果你想改变它的显示方式,你可以:
1.需要更改客户端应用程序上的首选项以更改其显示集合的方式(但是,大多数客户端应用程序没有允许您控制集合的特定格式的设置,因此您不太可能成功使用此设置)。请参阅客户端应用程序的文档。
1.不要使用集合,而使用
LISTAGG
,它确实返回一个字符串,您可以控制SQL语句中的格式:型