agh*_*aux 4 c# sql oracle parameters ora-01722
在sql查询中插入一串数字时遇到问题
SELECT *
FROM tablename a
WHERE a.flokkurid IN (3857,3858,3863,3285)
ORDER BY sjodategund, rodun
Run Code Online (Sandbox Code Playgroud)
...要么:
SELECT *
FROM tablename a
WHERE a.flokkurid IN (:strManyNumbers)
ORDER BY sjodategund, rodun
Run Code Online (Sandbox Code Playgroud)
...使用此代码:
using (OracleCommand sel = new OracleCommand(SQL, connectionstring)) {
sel.Parameters.Add(":strManyNumbers",
OracleDbType.Varchar2,
"Client",
ParameterDirection.Input);
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我运行此查询,我得到:
ORA-01722:无效的号码
但如果我只插入一个数字,即"3857",它将返回查询确定数据.
要传递一组值,您需要使用Oracle的表或数组类型.
首先,您创建一个表类型(例如,对于NUMBER):
CREATE TYPE number_table AS TABLE OF NUMBER;
Run Code Online (Sandbox Code Playgroud)
为查询创建参数时,将其声明为关联的PL/SQL数组:
OracleParameter param1 = new OracleParameter();
param1.OracleDbType = OracleDbType.Int32;
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Run Code Online (Sandbox Code Playgroud)
然后分配一些值:
param1 = new int[] { 3857, 3858, 3863, 3285 };
Run Code Online (Sandbox Code Playgroud)
你的查询需要一个演员:
SELECT * FROM tablename a
where a.flokkurid in (TABLE(CAST(:manyNumbers AS number_table)))
order by sjodategund, rodun
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10735 次 |
| 最近记录: |