首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的号码错误无效

我的号码错误无效
EN

Stack Overflow用户
提问于 2018-02-01 19:59:41
回答 1查看 425关注 0票数 0
代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-01 20:30:06

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

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

代码语言:javascript
复制
 WHERE measure_id IN  (SELECT msr_idFROM msr   ) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48570779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档