【发布时间】:2018-11-30 15:18:30
【问题描述】:
我想执行一个table 并从database 获取它的数据。所以我正在调用如下的存储过程:-
PROCEDURE GETSAPIDINFO
(
P_SAPID IN NUMBER,
OUTPUTTABLE OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN OUTPUTTABLE FOR
SELECT SAP_ID, STATE,LATITUDE, LONGITUDE FROM R4G_OSP.ENODEB
WHERE SAP_ID = P_SAPID;
END GETSAPIDINFO;
并将其数据填充到datatable
public DataTable ExecuteDataTable()
{
DataTable dt = null;
try
{
if (this.OpenConnection())
{
this._oracleCommand.Connection = this._oracleConnection;
this._oracleCommand.Parameters.Add(new OracleParameter("OUTPUTTABLE", OracleDbType.RefCursor, ParameterDirection.Output));
dt = new DataTable();
OracleDataAdapter da = new OracleDataAdapter(this._oracleCommand);
da.Fill(dt);
da.Dispose();
this._htblOutParamenter = new Hashtable();
foreach (OracleParameter op in this._oracleCommand.Parameters)
{
if (op.Direction == ParameterDirection.InputOutput)
this._htblOutParamenter.Add(op.ParameterName, (object)op.Value.ToString());
}
this.CloseConnection();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.CloseConnection();
}
return dt;
}
但我收到错误
ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误
在这一行
da.Fill(dt);
我不知道为什么会出现这个错误。
【问题讨论】:
-
您可以检查 SAP_ID 数据类型
-
哦,请按以下方法修改:WHERE SAP_ID = CAST (P_SAPID AS NVARCHAR2(30));
-
或者将变量声明为:P_SAPID IN NVARCHAR2(30),
-
@SinghKailash:是的,谢谢 kailash .. 现在可以工作了
-
当
SAP_ID数据类型为NVARCHAR2(30)时,为什么要声明P_SAPID IN NUMBER?你应该声明P_SAPID IN NVARCHAR2或者更好的P_SAPID IN R4G_OSP.ENODEB.SAP_ID%TYPE
标签: c# asp.net oracle stored-procedures