目录
- 出现问题的原因和背景
- 问题复现1
- 新建表A
- 新建表B
- 问题复现2
- 解决方法
出现问题的原因和背景
oracle进行关联查询的时候因为字段存在多个用逗号切割的id,导致查询的过程中报无效数字或非法数字
问题复现1
新建表A
CREATE TABLE "A" (
id NUMBER NOT NULL,
name VARCHAR2(255 BYTE)
)
INSERT INTO "A" VALUES ('1', '上海');
INSERT INTO "A" VALUES ('2', '北京');
INSERT INTO "A" VALUES ('3', '广州');
INSERT INTO "A" VALUES ('4', '深圳');
新建表B
CREATE TABLE "B" (
id NUMBER NOT NULL,
aid VARCHAR2(255 BYTE)
)
INSERT INTO "B" VALUES ('1', '1,2,3');
INSERT INTO "B" VALUES ('2', '1,2');
INSERT INTO "B" VALUES ('3', '1,2,3,4');
问题复现2
select * from A where id in (select aid from B where id = 3)
产生的原因:因为查询过程中,多个id放在了一个字段,这个字段不止有数字也有逗号,id是数字类型,所以数据库识别以后直接会报非法数字。
解决方法
先将子查询转成多行
WITH
split_string AS (
SELECT (select aid from B where id = 3)AS string FROM dual
)
SELECT
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aid
FROM
split_string
CONNECT BY
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL;
再次查询A表数据
select * from A where id in ( WITH
split_string AS (
SELECT (select aid from B where id = 3)AS string FROM dual
)
SELECT
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aid
FROM
split_string
CONNECT BY
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL)
将A表的名称转成一行
select LISTAGG(name,',') WITHIN GROUP (ORDER BY name) 关联流程 from A where id in ( WITH
split_string AS (
SELECT (select aid from B where id = 3)AS string FROM dual
)
SELECT
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS split_value
FROM
split_string
CONNECT BY
REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL)
以上就是oracle关联查询报invalid number错误的解决方法的详细内容,更多关于oracle报invalid number错误的资料请关注编程网(www.lsjlt.com)其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何在 Java 中创建类的实例对象?(java怎么创建类的实例对象)
- 如何高效更新Uncomtrade数据库数据
- 如何在 Java 中获取端口数据?(java怎么获取端口数据)
- 如何在 Java 中实现异步处理?(java怎么实现异步处理)
- Java 写小程序都用到了哪些技术呢?(java写小程序用到的技术有哪些)
- Java 动态数据源切换的方法究竟有哪些?(java动态数据源切换的方法是什么)
- JavaScript函数式编程的亮点有哪些?(JavaScript函数式编程有啥亮点)
- 如何保障 Java 应用程序的安全性?(Java应用程序的安全性如何保障)
- Java 中 aspect 关键字的作用范围是怎样的?(java aspect关键字的作用范围)
- Java 中 BigDecimal 的使用方法究竟有哪些?(java中bigdecimal的使用方法是什么)
猜你喜欢
AI推送时光机oracle关联查询报invalid number错误的解决方法
数据库2024-09-30
mysql一对多关联查询分页错误问题的解决方法
数据库2024-04-02
MySQL查询出现1055错误的解决方法
数据库2023-08-16
MySQL查询出现1055错误的原因及解决方法
数据库2023-05-19
navicat执行oracle函数脚本报24344错误的解决方法
数据库2024-04-02
关于 MySQL 嵌套子查询中无法关联主表字段问题的解决方法
数据库2022-12-26
关于MySQL嵌套子查询中无法关联主表字段问题的解决方法
数据库2022-12-26
进行SQL查询时提示对象名无效错误的解决方法
数据库2024-04-02
关于访问后端接口报404错误问题的解决方法(全网最细!)
数据库2023-05-16
咦!没有更多了?去看看其它编程学习网 内容吧