尝试从过程中获取数据时:PL/SQL - 数字或值错误
Posted
技术标签:
【中文标题】尝试从过程中获取数据时:PL/SQL - 数字或值错误【英文标题】:When trying to get data from Procedure : PL/SQL - Numeric or Value Error 【发布时间】:2020-09-28 07:20:54 【问题描述】:我需要使用oracle存储过程通过c#发送和取回数据。
所以我编辑了我的参数和代码。 但是当我尝试读取数据时,执行读取器时出现错误。 oracle连接没有问题,所以我只显示我添加参数的位置 我的 C# 代码如下:
object piece_num_id =gridViewMain.GetFocusedRowCellValue(gridViewMain.FocusedColumn);
cmd.Parameters.Add("p_piece_num_id", OracleDbType.Int32).Value =Convert.ToInt32(piece_num_id);
cmd.Parameters.Add("p_piece_id", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_material_code", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_steel_grade", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_tickness", OracleDbType.Double).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_width", OracleDbType.Double).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_length", OracleDbType.Double).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_pieces_count", OracleDbType.Int32).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_coating", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_paint_code", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_surface_type", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_surface_quality", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_quality_id", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_spec_no", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_inner_diameter", OracleDbType.Int32).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_trapez_form", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_net_weight", OracleDbType.Double).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_gross_weight", OracleDbType.Double).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_product_name_1", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_product_name_2", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_label_text", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_mother_coil", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
cmd.Parameters.Add("p_reference", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
DataSet ds = new DataSet();
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(ds);
定义一个oracle过程如下:
PROCEDURE semifinished_lable_data(p_piece_num_id IN INTEGER,
p_piece_id OUT STRING,
p_material_code OUT STRING,
p_steel_grade OUT STRING,
p_tickness OUT NUMBER,
p_width OUT NUMBER,
p_length OUT NUMBER,
p_pieces_count OUT NUMBER,
p_coating OUT STRING,
p_paint_code OUT STRING,
p_surface_type OUT STRING,
p_surface_quality OUT STRING,
p_quality_id OUT STRING,
p_spec_no OUT STRING,
p_inner_diameter OUT NUMBER,
p_trapez_form OUT STRING,
p_net_weight OUT NUMBER,
p_gross_weight OUT NUMBER,
p_product_name_1 OUT STRING,
p_product_name_2 OUT STRING,
p_label_text OUT STRING,
p_mother_coil OUT STRING,
p_reference OUT STRING)
当我尝试从此过程中获取数据时, 我遇到了这个错误, 程序中的错误选择查询中似乎存在。
Oracle.ManagedDataAccess.Client.OracleException: 'ORA-06502: PL/SQL: 数值或数值错误
【问题讨论】:
【参考方案1】:这似乎是存储过程使用的其中一个表的数据类型有问题。例如,您发送的宽度为 123,并且表中的列定义为 NUMBER(2)。您应该只检查 7 个 NUMBER 参数。
如果没有表格定义和您提供给 SP 的价值,我再准确不过了
【讨论】:
以上是关于尝试从过程中获取数据时:PL/SQL - 数字或值错误的主要内容,如果未能解决你的问题,请参考以下文章
获取 ORA-06502:PL/SQL:数字或值错误:SQL 触发器中的字符到数字转换错误
插入 CLOB 列时出错:ORA-06502:PL/SQL:数字或值错误