請忽略以下明顯的語法缺陷:Oracle 10g的IN子句查詢
我有一個這樣的SQL作爲一個命名查詢:
select saalry from emp where emp_id in (:id)
ID是型號 我想在傳遞一個逗號分隔的列表如下:
String id = 121,123,456
但我正在逐漸ORA-01722: invalid number
我如何傳遞一個逗號分隔的ID列表,我的條款?
請忽略以下明顯的語法缺陷:Oracle 10g的IN子句查詢
我有一個這樣的SQL作爲一個命名查詢:
select saalry from emp where emp_id in (:id)
ID是型號 我想在傳遞一個逗號分隔的列表如下:
String id = 121,123,456
但我正在逐漸ORA-01722: invalid number
我如何傳遞一個逗號分隔的ID列表,我的條款?
假設:id
是包含數字的相對短的逗號分隔的列表(例如'123,456,789'
),這可能對您足夠的字符串:
select saalry from emp
where INSTR(',' || :id || ','
, ',' || TRIM(TO_CHAR(emp_id)) || ','
) > 0;
它不會然而執行,以及,因爲它不太可能使用emp_id
上的索引。
謝謝,它爲我工作 – 2011-08-04 13:23:36
答案是夠好的,雖然我會使用集合和TABLE運算符,因此可以使用索引。 – 2011-08-11 15:16:35
他們的榜樣是
select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
connect by regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null;
可以在子句中放入
select * from emp where ename in (
select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
connect by regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null);
你說'id爲類型number',但你將它作爲一個字符串傳遞。 – Sathya 2011-03-26 06:20:11