Oracle 我收到无效号码错误

Oracle 我收到无效号码错误,oracle,plsql,Oracle,Plsql,listagg生成一个字符串。在WHERE子句中,将其与度量值_id进行比较,我猜它是数字。您正在比较数字和字符串,因此Oracle执行隐式数据类型转换。当然,聚合的逗号分隔字符串不能转换为数字,因此出现ORA-01722错误 这个错误很容易避免。您有一个WITH子句,它生成一个数字表:为什么首先要应用listagg?您可以只使用子查询分解的输出: SET SERVEROUTPUT ON DECLARE lv_comp_msr VARCHAR2(20000); BEGIN

listagg生成一个字符串。在WHERE子句中,将其与度量值_id进行比较,我猜它是数字。您正在比较数字和字符串,因此Oracle执行隐式数据类型转换。当然,聚合的逗号分隔字符串不能转换为数字,因此出现ORA-01722错误

这个错误很容易避免。您有一个WITH子句,它生成一个数字表:为什么首先要应用listagg?您可以只使用子查询分解的输出:

SET SERVEROUTPUT ON    
DECLARE
    lv_comp_msr VARCHAR2(20000);
 BEGIN
     WITH msr AS
        (SELECT REGEXP_SUBSTR ('02,03,04,09,12', '[^,]+',1,LEVEL) AS msr_id
           FROM DUAL
          CONNECT BY REGEXP_SUBSTR ('02,03,04,09,12', '[^,]+',1,LEVEL) IS NOT NULL    ) 
     SELECT listagg (measure_id, ',') WITHIN GROUP (    ORDER BY measure_id) AS MEASURE_ID 
     INTO lv_comp_msr
    FROM  
          (SELECT measure_id FROM irp_measures_def   ) 
    WHERE measure_id IN  (SELECT listagg (msr_id, ',') WITHIN GROUP (ORDER BY msr_id) msr_id
                          FROM msr   ) 
      --and COMP_MSR_FLAG is null
   ;   
   DBMS_OUTPUT.put_line('lv_comp_msr=' || lv_comp_msr); 
END;

我不明白你的意图。您首先将字符串“02,03,04,09,12”转换为行,然后再次在查询中执行listagg。那个么为什么在第一步就把它转换成行呢。
 WHERE measure_id IN  (SELECT msr_idFROM msr   )