当我使用下面的查询来获取所需的详细信息...
SELECT
USERNAME,
FULLNAME,
DEPARTMENT,
LISTAGG(TASKNAME, ', ') WITHIN GROUP (ORDER BY TASKNAME) TASKNAME
FROM USERDB t1 LEFT JOIN
USERDB_TASKS t3 ON t1.USERID=t3.USERID LEFT JOIN
TASKS t2 ON t3.TASKSID=t2.TASKSID
GROUP BY
USERNAME,
FULLNAME,
DEPARTMENT;
TASKNAME
列以奇怪的格式(在SQL Developer和批处理脚本中)填充值,即每个单词的所有字符如下所示散布,而在实际表TASKS
中,任务名称值/单词是正常的。
USERNAME FULLNAME DEPARTMENT TASKNAME
duryo dur yogeli IT D o m a i n a d m i n, S e s s i o n u s e r
rected rec tedenson SALES P r o c e s s m a n a g e r, D B A u s e r, F l o . . .
尽管我在脚本中使用了下面给出的必需格式设置选项,但我不明白为什么LISTAGG
会发生这种奇怪的值连接以及如何解决此问题。我已经计算出表TASKS
中所有可用任务名称的所有字符之和仅为130。
SET TRIMSPOOL ON
SET TRIMOUT ON
SET UNDERLINE off
set pagesize 0 embedded on
set linesize 100
column USERNAME format a15
column FULLNAME format a25
column DEPARTMENT format a15
column TASKNAME format a200
感谢您的帮助!
EDIT-1 :实际TASKS
表值的DUMP每个字母后都有一个奇怪的字符。
查询的输出:
select taskname, dump(taskname, 17) as dump_test from TASKS
具有所有奇怪的字符,如下所示。
Process manager Typ=1 Len=28: ^@,P,^@,r,^@,o,^@,c,^@,e,^@,s,^@,s,^@, ,^@,M,^@,a,^@,n,^@,a,^@,g,^@,e,^@,r
。
对此有什么解决方案吗?
答案 0 :(得分:0)
只需为遇到此问题的其他人添加一些有关DUMP功能的文档。
您的问题很有趣。大家都发现,转储函数只是显示该字段是Varchar2字段,而转储函数的输出-Typ = 1则表明该列很好。我在下面粘贴了一些我已经能够记录的转储数据类型值的图像。
我在一个不错的代码段下面粘贴了一些示例,以提供有关使用Oracle Dump函数的示例。
SELECT
DUMP(to_date('15-JAN-18'),10,1,1) AS date_type
, DUMP(123,10,1,1) AS num_type
, DUMP('abc',10,1,1) AS var_or_char_type
FROM dual
;
/* OUTPUT:
|
| "DATE_TYPE" "NUM_TYPE" "VAR_OR_CHAR_TYPE"
|--------------------|-------------------|------------------
| "Typ=13 Len=8: 226" "Typ=2 Len=3: 194" "Typ=96 Len=3: 97"
*/
基本上,如果您想摆脱这些奇怪的字符,请在此字段中找到填充此数据的实体,并将其固定在源头。