首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ASP.NET和处理Oracle存储的Proc?

如何使用ASP.NET和处理Oracle存储的Proc?
EN

Stack Overflow用户
提问于 2010-03-25 14:37:03
回答 3查看 873关注 0票数 0

我已经在这方面做了很长一段时间,因为我已经习惯了SQL Server。我有以下代码,并验证了OracleDbType的正确性,并验证了传递给参数的实际值是否匹配。我认为我的问题可能在于返回值。它所做的就是给我数行数。我在某个地方读到返回参数必须设置在顶部。我得到的具体错误是,

PLS-00306:调用\u0027INSERT_REC\u0027时参数的错误数目或类型

ORA-06550:第1行,第7列:\nPL/SQL:语句被忽略

存储过程是:

代码语言:javascript
运行
复制
PROCEDURE INSERT_REC
(
  A_MILL_CENTER     IN GRO_OWNER.MOVEMENT.MILL_CENTER%TYPE,     --# VARCHAR2(10)
  A_INGREDIENT_CODE IN GRO_OWNER.MOVEMENT.INGREDIENT_CODE%TYPE, --# VARCHAR2(50)
  A_FEED_CODE       IN GRO_OWNER.MOVEMENT.FEED_CODE%TYPE,       --# VARCHAR2(30)
  --# A_MOVEMENT_TYPE should be ‘RECEIPT’ for ingredient receipts
  A_MOVEMENT_TYPE   IN GRO_OWNER.MOVEMENT.MOVEMENT_TYPE%TYPE,   --# VARCHAR2(10)
  A_MOVEMENT_DATE   IN VARCHAR2,                                --# VARCHAR2(10)
  A_MOVEMENT_QTY    IN GRO_OWNER.MOVEMENT.MOVEMENT_QTY%TYPE,    --# NUMBER(12,4)
  --# A_INVENTORY_TYPE should be ‘INGREDIENT’ or ‘FINISHED’
  A_INVENTORY_TYPE  IN GRO_OWNER.MOVEMENT.INVENTORY_TYPE%TYPE,  --# VARCHAR2(10)
  A_CREATE_USERID   IN GRO_OWNER.MOVEMENT.CREATE_USERID%TYPE,   --# VARCHAR2(20)
  A_RETURN_VALUE    OUT NUMBER                                  --# NUMBER(10,0)
);

我的代码如下:

代码语言:javascript
运行
复制
 for (int i=0; i < theData.Length -1; i+=3)
                {
//3 items hardcoded for now

string millCenter = "0010260510";
string movementType = "RECEIPT";
string feedCode = "test this";
string userID = "GRIMMETTM";
string inventoryType = "INGREDIENT"; //set to FINISHED for feed stuff
string movementDate = theData[i];
string ingCode = System.Text.RegularExpressions.Regex.Match(
        theData[i + 1], @"^([0-9]*)").ToString();
//int pounds = Convert.ToInt32(theData[i + 2].Replace(",", ""));
int pounds = 100;

//setup parameters

OracleParameter p9 =
    new OracleParameter("A_RETURN_VALUE", OracleDbType.Int32, 30);
p9.Direction = ParameterDirection.ReturnValue;
oraCmd.Parameters.Add(p9);

OracleParameter p1 =
    new OracleParameter("A_MILL_CENTER", OracleDbType.Varchar2, 10);
p1.Direction = ParameterDirection.Input;
p1.Value = millCenter;
oraCmd.Parameters.Add(p1);

OracleParameter p2 =
    new OracleParameter("A_INGREDIENT_CODE", OracleDbType.Varchar2, 50);
p2.Direction = ParameterDirection.Input;
p2.Value = ingCode;
oraCmd.Parameters.Add(p2);

OracleParameter p3 =
    new OracleParameter("A_FEED_CODE", OracleDbType.Varchar2, 30);
p3.Direction = ParameterDirection.Input;
p3.Value = feedCode;
oraCmd.Parameters.Add(p3);

OracleParameter p4 =
    new OracleParameter("A_MOVEMENT_TYPE", OracleDbType.Varchar2, 10);
p4.Direction = ParameterDirection.Input;
p4.Value = movementType;
oraCmd.Parameters.Add(p4);

OracleParameter p5 =
    new OracleParameter("A_MOVEMENT_DATE", OracleDbType.Varchar2, 10);
p5.Direction = ParameterDirection.Input;
p5.Value = movementDate;
oraCmd.Parameters.Add(p5);

OracleParameter p6 =
    new OracleParameter("A_MOVEMENT_QTY", OracleDbType.Int32, 12);
p6.Direction = ParameterDirection.Input;
p6.Value = pounds;
oraCmd.Parameters.Add(p6);

OracleParameter p7 =
    new OracleParameter("A_INVENTORY_TYPE", OracleDbType.Varchar2, 10);
p7.Direction = ParameterDirection.Input;
p7.Value = inventoryType;
oraCmd.Parameters.Add(p7);

OracleParameter p8 =
    new OracleParameter("A_CREATE_USERID", OracleDbType.Varchar2, 20);
p8.Direction = ParameterDirection.Input;
p8.Value = userID;
oraCmd.Parameters.Add(p8);


//open and execute
oraConn.Open();
oraCmd.ExecuteNonQuery();
oraConn.Close();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-25 14:46:18

ParameterDirection for A_RETURN_VALUE应该是ParameterDirection.Output

票数 0
EN

Stack Overflow用户

发布于 2010-03-25 14:45:33

您是否尝试过在最后而不是第一次添加RETURN_VALUE参数?如果我还记得,当通过Oracle提供程序调用Oracle存储过程时,参数必须保持完全相同的顺序。

票数 0
EN

Stack Overflow用户

发布于 2010-03-25 15:24:51

从您的示例中无法判断,但会不会是在for循环范围之外声明oraCmd对象呢?我在这个例子中没有看到声明,但是如果是这样的话,那么每次迭代都会将所有Oracle参数添加到数组中,在第一个之后的任何运行中都会有太多的语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2516384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档