[200分]调用oracle存储过程 同样代码,一台机子正常,一台机子报错,急救!

德仔 2009-10-19 12:25:09
调用oracle存储过程 同样代码,一台机子正常,一台机子报错,急救!

报错如下:

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'INSERTTOEBSCODE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


调用的类是这样的:

/// <summary>
/// 插入已OK的价格至EBS中
/// </summary>
/// <param name="priceForm"></param>
/// <returns></returns>
public bool InsertToEBS(Entity.CAS.PriceFormInfo priceForm)
{
OracleParameter[] parameters =
{
new OracleParameter("P_PRICEFORMID",OracleType.VarChar,20),
new OracleParameter("P_VENDOR_CODE",OracleType.VarChar,20),
new OracleParameter("P_VENDOR_SITE_CODE",OracleType.VarChar,20),
new OracleParameter("P_VAT_CODE",OracleType.VarChar,20),
new OracleParameter("P_ITEM_CODE",OracleType.VarChar,20),
new OracleParameter("P_EFFECTIVE_DATE",OracleType.VarChar,20),
new OracleParameter("P_PURCHASER",OracleType.VarChar,20),
new OracleParameter("P_CHECKER",OracleType.VarChar,20),
new OracleParameter("P_AUDITOR",OracleType.VarChar,20),
new OracleParameter("P_POCT",OracleType.VarChar,10),
new OracleParameter("P_UNIT_PRICE",OracleType.VarChar,20),
new OracleParameter("P_PASSED_DATE",OracleType.VarChar,20),
new OracleParameter("P_TERMS_DESC",OracleType.VarChar,100),
new OracleParameter("v_retval",OracleType.Number)

};





parameters[0].Value = priceForm.FormID.ToString();
parameters[1].Value = priceForm.SupplierCode;
parameters[2].Value = priceForm.Vendor_site_code;
parameters[3].Value = priceForm.Tax.ToString();
parameters[4].Value = priceForm.MaterialCode.Trim();


DateTime effectiveDate= Convert.ToDateTime(priceForm.EffectiveDate.ToString());

DateTime passedDate= Convert.ToDateTime(priceForm.PassedDate.ToString());



if (priceForm.EffectiveDate > priceForm.PassedDate)
{


parameters[5].Value = effectiveDate.ToString("yyyy-MM-dd hh:mm:ss");


}
else
{
parameters[5].Value = passedDate.ToString("yyyy-MM-dd hh:mm:ss");
}
parameters[6].Value = priceForm.Purchaser;
parameters[7].Value = priceForm.Checker;
parameters[8].Value = priceForm.Auditor;
parameters[9].Value = priceForm.POCT;
parameters[10].Value = priceForm.Price.ToString();
parameters[11].Value = passedDate.ToString("yyyy-MM-dd hh:mm:ss");
parameters[12].Value = priceForm.Payment.ToString().Trim();
parameters[13].Direction=ParameterDirection.Output;



try
{
Convert.ToInt32(OracleHelper.ExecuteNonQuery(OracleHelper.ConnectionStringProfile, CommandType.StoredProcedure, "BBKEDU_PO_CAS_PRICE_PKG.InsertToEBSCode", parameters));

int retval = Convert.ToInt32(parameters[13].Value);

if (retval == 1)
{
return true;
}
else

return false;
}
catch (Exception ee)
{
throw ee;
}
finally
{

}

包中的存储过程:

create or replace package BBKEDU_PO_CAS_PRICE_PKG is

-- Author : EASTJAZZ
-- Created : 2009-10-16 0:29:13
-- Purpose :

procedure InsertToEBSCode(P_PRICEFORMID IN VARCHAR2,
P_VENDOR_CODE IN VARCHAR2,
P_VENDOR_SITE_CODE IN VARCHAR2,
P_VAT_CODE IN VARCHAR2,
P_ITEM_CODE IN VARCHAR2,
P_EFFECTIVE_DATE in VARCHAR2,
P_PURCHASER IN VARCHAR2,
P_CHECKER IN VARCHAR2,
P_AUDITOR IN VARCHAR2,
P_POCT IN VARCHAR2,
P_UNIT_PRICE IN VARCHAR2,
P_PASSED_DATE IN VARCHAR2,
P_TERMS_DESC IN VARCHAR2,
v_retval out number);

end BBKEDU_PO_CAS_PRICE_PKG;





我查了好多的贴子,都没有看到类似问题解决办法,不知兄弟们或哪们同仁碰到过同样的问题,提供相关的解决思路,谢谢。


按报错来看,我将所有的类型改成字符类型均不行。在本机测试非常正常,放至服务器上报错。本机是WINXP系统,服务器是win2000英文操作系统,不知是不是这个原因,如果是,又如何解决呢?


急救!谢谢。帮顶有分.
...全文
945 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ofx 2010-12-31
  • 打赏
  • 举报
回复
AAAAAAAAAAAAAAAAA
德仔 2009-10-19
  • 打赏
  • 举报
回复
本机的版本有两个版本,一个是8.0 一个是9.0

而服务器的版本是9.1

这到提醒我一下了,问题会不会是出现在这呢?
德仔 2009-10-19
  • 打赏
  • 举报
回复
至于数据库中的表结构,我也是被逼上梁山,将要写入的数据把它全设成了varchar2型


FORMPRICEID VARCHAR2(20)
VENDOR_ID NUMBER
VENDOR_SITE_ID NUMBER
ITEM_ID NUMBER
UNIT_PRICE VARCHAR2(20)
EFFECTIVE_DATE VARCHAR2(20)
POCT VARCHAR2(10)
ITEM_CODE VARCHAR2(20)
PASSED_DATE VARCHAR2(20)
TERMS_ID NUMBER
CURRENCY_CODE VARCHAR2(20)
VAT_CODE_ID NUMBER
CREATE_DATE VARCHAR2(20)
PURCHASER VARCHAR2(20)
CHECKER VARCHAR2(20)
AUDITOR VARCHAR2(20)
COMPANYTYPE NUMBER
ORG_ID NUMBER
VENDOR_CODE VARCHAR2(20)
VENDOR_SITE_CODE VARCHAR2(20)
VAT_CODE VARCHAR2(20)
TAX_CODE VARCHAR2(20)
TERMS_DESC VARCHAR2(100)
德仔 2009-10-19
  • 打赏
  • 举报
回复
不对的,我这是调用存储过程中的参数,应该不用:号。

如果是用:号应该是调用function里面的

如果问题是出在这里的话,那另一台机器也应该不正常,现在是一台机子正常另一台机子不正常
xray2005 2009-10-19
  • 打赏
  • 举报
回复
oracle参数是:
:参数, 不是@参数
xray2005 2009-10-19
  • 打赏
  • 举报
回复
wrong number or types of arguments in call to 'INSERTTOEBSCODE'

先看看你的数据表那些字段分别是什么类型.

你看看你的存储过程参数,已经代码里的参数类型,都是varchar2,如果和你数据表不对应,那当然就错了.

不是说都设置成varchar2就可以存的,oracle不得行.sql server似乎可以.
  • 打赏
  • 举报
回复

OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["NEWOracleConn"].ToString());
OracleCommand cmd = new OracleCommand("UPDATE TUSER SET PHOTO=:photo WHERE userid=:id", conn);
Console.WriteLine(cmd.CommandText);
cmd.Parameters.Add("photo",OracleType.Blob);
cmd.Parameters["photo"].Value = photo;
cmd.Parameters.Add("id", OracleType.Number);
cmd.Parameters["id"].Value = id;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

参数前面 加上冒号试试
服务器与本机oracle一个版本吗?
德仔 2009-10-19
  • 打赏
  • 举报
回复
在PL/SQL中测试存储过程OK
  • 打赏
  • 举报
回复
你的存储过程在Oracle 9i 运行
出现 : 警告: 创建的过程带有编译错误。
wuyq11 2009-10-19
  • 打赏
  • 举报
回复
版本不一致,可能类型导致不一样,还有操作系统问题
类型可能导致不一致
换其他操作系统是否可以
guyehanxinlei 2009-10-19
  • 打赏
  • 举报
回复
还有这样的问题,关注一下.
chaozi_249 2009-10-19
  • 打赏
  • 举报
回复
2台机子操作系统都一样,都远程使用的是一个库吗?还是一个是主机一个是客户端?
德仔 2009-10-19
  • 打赏
  • 举报
回复
是的,跟版本的編譯有關聯,另外,存入null值也會出現問題.問題已經解決了.謝謝.
LutzMark 2009-10-19
  • 打赏
  • 举报
回复
都用9i的版本就可以了

111,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧