Oracle 传递集合id';s

Oracle 传递集合id';s,oracle,plsql,Oracle,Plsql,下面的查询抛出 ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太大 小的 函数fws_pivot将返回带有逗号分隔符的列中的行。 如果我尝试查询特定id(sfrstcrpidm),它会工作,但不会用于集合。我错过了什么 如果我尝试查询特定id(sfrstcrpidm),它会工作 今天的提示:始终使用现代、明确的JOIN语法。更容易写(没有错误),更容易阅读和维护,如果需要,更容易转换为外部连接!“用逗号分隔符返回列中的行”是什么意思?fws\u pivot是自定义聚合函数吗?如果是

下面的查询抛出

ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太大 小的

函数fws_pivot将返回带有逗号分隔符的列中的行。 如果我尝试查询特定id(sfrstcrpidm),它会工作,但不会用于集合。我错过了什么

如果我尝试查询特定id(sfrstcrpidm),它会工作


今天的提示:始终使用现代、明确的
JOIN
语法。更容易写(没有错误),更容易阅读和维护,如果需要,更容易转换为外部连接!“用逗号分隔符返回列中的行”是什么意思?
fws\u pivot
是自定义聚合函数吗?如果是,它是否返回
varchar2
clob
?如果您有一个自定义聚合函数返回一个
varchar2
,那么结果将被限制为4000字节的最大SQL
varchar2
大小(除非您在最新版本的Oracle中启用了扩展字符串,限制为32k)。@justin即使我将大小更改为varchar2(32767).它抛出相同的错误更改了什么尺寸?如果猜测这是一个返回
varchar2
的自定义聚合函数是正确的,那么最终结果的长度是否小于32k?或者可能超过32k?如果用两个破折号连接三个数字,我猜每行至少有16字节长。如果连接在一起的此类行超过2000行,则需要函数返回
clob
(如果没有在数据库级别启用扩展字符串大小,则返回的值会更小)。根据Oracle版本的不同,使用内置的
listag
可能更有意义。我应该使用listag来代替函数吗?
SELECT
    fws_pivot( (ssbsect_subj_code|| '-'|| ssbsect_crse_numb || '-' || ssbsect_seq_numb)) AS std_course
FROM
      sfrstcr,
      ssbsect
WHERE
      sfrstcr_crn = ssbsect_crn
  AND sfrstcr_term_code = ssbsect_term_code
  AND sfrstcr_pidm in (select sfbetrm_pidm from sfbetrm where sfbetrm_term_code = '201931')
  AND sfrstcr_term_code = '201931'