oracle關(guān)聯(lián)查詢報(bào)invalid number錯(cuò)誤的解決方法
出現(xiàn)問題的原因和背景
oracle進(jìn)行關(guān)聯(lián)查詢的時(shí)候因?yàn)樽侄?strong>存在多個(gè)用逗號(hào)切割的id,導(dǎo)致查詢的過程中報(bào)無(wú)效數(shù)字或非法數(shù)字
問題復(fù)現(xiàn)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');
問題復(fù)現(xiàn)2
select * from A where id in (select aid from B where id = 3)
產(chǎn)生的原因:因?yàn)椴樵冞^程中,多個(gè)id放在了一個(gè)字段,這個(gè)字段不止有數(shù)字也有逗號(hào),id是數(shù)字類型,所以數(shù)據(jù)庫(kù)識(shí)別以后直接會(huì)報(bào)非法數(shù)字。
解決方法
先將子查詢轉(zhuǎn)成多行
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表數(shù)據(jù)
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表的名稱轉(zhuǎn)成一行
select LISTAGG(name,',') WITHIN GROUP (ORDER BY name) 關(guān)聯(lián)流程 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關(guān)聯(lián)查詢報(bào)invalid number錯(cuò)誤的解決方法的詳細(xì)內(nèi)容,更多關(guān)于oracle報(bào)invalid number錯(cuò)誤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Oracle 中 row_number()、rank()、dense_rank() 函數(shù)的用法詳解
- Oracle中ROW_NUMBER()OVER()函數(shù)用法實(shí)例講解
- Oracle數(shù)字類型number自增的實(shí)現(xiàn)代碼
- Oracle數(shù)據(jù)庫(kù)rownum和row_number的不同點(diǎn)
- oracle中rownum和row_number()
- Oracle Number型數(shù)值存儲(chǔ)與轉(zhuǎn)換的實(shí)現(xiàn)詳解
- Oracle Number型的深入理解
- Oracle中TO_NUMBER()函數(shù)的使用
相關(guān)文章
解決Oracle?11g?導(dǎo)出數(shù)據(jù)報(bào)?“ORA-01455:?轉(zhuǎn)換列溢出整數(shù)數(shù)據(jù)類型”的問題
這篇文章主要介紹了Oracle?11g?導(dǎo)出數(shù)據(jù)報(bào)?“ORA-01455:?轉(zhuǎn)換列溢出整數(shù)數(shù)據(jù)類型”的問題,文中給大家介紹了ORACLE?11g?導(dǎo)出數(shù)據(jù)的操作步驟,需要的朋友可以參考下2021-12-12Oracle內(nèi)存分配不足的過程解析(業(yè)務(wù)干掛數(shù)據(jù)庫(kù))
本文介紹了Oracle數(shù)據(jù)庫(kù)內(nèi)存分配不足的問題,原因主要是業(yè)務(wù)劇增導(dǎo)致的內(nèi)存不足,通過分析AAS負(fù)載、等待事件、transactions和阻塞情況,發(fā)現(xiàn)PGA內(nèi)存出現(xiàn)了嚴(yán)重抖動(dòng),感興趣的朋友一起看看吧2025-02-02使用Navicat Premium連接Oracle的方法步驟
這篇文章主要介紹了使用Navicat Premium連接Oracle的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Oracle中的循環(huán)之FOR循環(huán)、WHILE循環(huán)和LOOP循環(huán)詳解
這篇文章主要介紹了Oracle中的循環(huán)之FOR循環(huán)、WHILE循環(huán)和LOOP循環(huán)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06