【问题标题】:ORA-06502: PL/SQL: numeric or value error: character to number conversion error while getting data from databaseORA-06502: PL/SQL: 数字或值错误: 从数据库获取数据时字符到数字的转换错误
【发布时间】: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


【解决方案1】:

请修改以下更改:

WHERE SAP_ID = CAST (P_SAPID AS NVARCHAR2(30));

将变量声明为: NVARCHAR2(30) 中的 P_SAPID,

【讨论】:

  • 感谢 Kailash singh :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多