如何设置可变长度数据类型的大小

时间:2014-02-24 16:00:20

标签: c# oracle stored-procedures

我正在尝试向过程发送参数,并根据过程返回的输出执行一些操作。我有一个公共类来处理添加参数和调用过程。该类将被称为:

obj.addparameter(parametername, parametervalue, oracletype.datatype, parameterdirection.input)

所以假设我有一个过程,它将客户ID作为参数并输出名称。

PROCEDURE get_customer_name(
c_customer_id IN Number,
c_customer_name OUT VARCHAR)
IS
BEGIN
 SELECT last_name || ' ' || middle_name  || ' ' || first_name  
 INTO c_customer_name
 FROM CUSTOMER WHERE CUSTOMER_ID = c_customer_id;
END;

要调用上述过程,我需要调用类:

 obj.addparameter("customerId", 123, oracletype.number, parameterdirection.Input)
 obj.addparameter("customerName", dbnull.value, oracletype.varchar, parameterdirection.output)

该类具有以下代码:

if (param.ParamDirection == ParameterDirection.Output)
{
    command.Parameters.Add(c_customer_name,oracletype.varchar);
    command.parameters["c_customer_name"].direction = parameterdirection.output                                                                    
}
else
{
    command.parameters.add("c_customer_id",oracletype.number).value = 123;
    command.parameters["c_customer_id"].direction = parameterdirection.input
}
command.commandType = commandType.StoredProcedure;
command.executenonquery();//Error: c_customer_name "No size set for  variable length data type: String."

当我运行上面的代码时,我收到一个错误:

  

“没有为可变长度数据类型设置大小:字符串。”

我必须在下面的行中添加列的大小以避免错误。

command.Parameters.Add(c_customer_name,oracletype.varchar,50)//Add size to output parameter

有没有办法避免将size属性添加到输出参数。 According to MSDN,看起来需要为输出参数添加size属性。如果是那样的话,那么如何处理不同输出参数的大小。我可能会将“客户名称”,“地址”作为参数返回,但我不想为不同的输出参数指定大小。 我正在使用带有C#代码隐藏和Oracle数据库的.NET4.0。

0 个答案:

没有答案