oracle關聯(lián)查詢報invalid number錯誤的解決方法
出現(xiàn)問題的原因和背景
oracle進行關聯(lián)查詢的時候因為字段存在多個用逗號切割的id,導致查詢的過程中報無效數(shù)字或非法數(shù)字
問題復現(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');問題復現(xiàn)2
select * from A where id in (select aid from B where id = 3)

產(chǎn)生的原因:因為查詢過程中,多個id放在了一個字段,這個字段不止有數(shù)字也有逗號,id是數(shù)字類型,所以數(shù)據(jù)庫識別以后直接會報非法數(shù)字。
解決方法
先將子查詢轉成多行
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表的名稱轉成一行
select LISTAGG(name,',') WITHIN GROUP (ORDER BY name) 關聯(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關聯(lián)查詢報invalid number錯誤的解決方法的詳細內(nèi)容,更多關于oracle報invalid number錯誤的資料請關注腳本之家其它相關文章!
相關文章
基于Oracle的面向?qū)ο蠹夹g入門基礎簡析開發(fā)者網(wǎng)絡Oracle
基于Oracle的面向?qū)ο蠹夹g入門基礎簡析開發(fā)者網(wǎng)絡Oracle...2007-03-03
oracle查看執(zhí)行最慢與查詢次數(shù)最多的sql語句
這篇文章主要給大家介紹了oracle查看執(zhí)行最慢與查詢次數(shù)最多的sql語句,文中給出完整的示例代碼,相信對大家的學習或者工作具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-01-01
Oracle Linux 6.8安裝 mysql 5.7.17的詳細教程
這篇文章主要介紹了Oracle Linux 6.8安裝 mysql 5.7.17的詳細教程,需要的朋友可以參考下2017-06-06
Oracle 管道 解決Exp/Imp大量數(shù)據(jù)處理問題
Oracle的exp/imp是許多用戶經(jīng)常使用的兩個工具. 它們常被用來做數(shù)據(jù)庫的邏輯備份,數(shù)據(jù)庫重組和數(shù)據(jù)轉移等工作.2009-07-07
oracle net manager 數(shù)據(jù)傳輸安全步驟詳解
oracle net manager來加密客戶端與數(shù)據(jù)庫之間或中間件與 數(shù)據(jù)庫之間的網(wǎng)絡傳輸數(shù)據(jù)。這篇文章主要介紹了oracle net manager 數(shù)據(jù)傳輸安全 ,需要的朋友可以參考下2018-09-09

