+ -
当前位置:首页 → 问答吧 → 怎么调用oracle自己的存储过程

怎么调用oracle自己的存储过程

时间:2011-11-02

来源:互联网

Hi, 朋友们, 
I got the error :
[Oracle.DataAccess.Client.OracleException] = {"ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'VALIDATE_NETWORK_SCHEMA' 时参数个数或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored"}

当调用 SDO_NET_MEM.NETWORK_MANAGER.VALIDATE_NETWORK_SCHEMA时:
C# code
public string getRecommendPath()
{
String pathid = "-1";
OracleConnection conn = ....;
try
{
conn.Open();

// OracleCommand cmd_DN = new OracleCommand("SDO_NET_MEM.NETWORK_MANAGER.DROP_NETWORK", conn); //Drop network
// cmd_DN.CommandType = CommandType.StoredProcedure;
// cmd_DN.Parameters.Add("network", OracleDbType.Varchar2, "SDO_NET1", System.Data.ParameterDirection.Input);
// cmd_DN.ExecuteNonQuery();

OracleCommand cmd_LN = new OracleCommand("SDO_NET_MEM.NETWORK_MANAGER.READ_NETWORK", conn); //Load network
cmd_LN.CommandType = CommandType.StoredProcedure;
cmd_LN.Parameters.Add("network", OracleDbType.Varchar2, "SDO_NET1", System.Data.ParameterDirection.Input);
cmd_LN.Parameters.Add("allow_updates", OracleDbType.Varchar2, "FALSE", System.Data.ParameterDirection.Input);
cmd_LN.ExecuteNonQuery();

OracleCommand cmd_VN = new OracleCommand("SDO_NET_MEM.NETWORK_MANAGER.VALIDATE_NETWORK_SCHEMA", conn); //Validate Network
cmd_VN.CommandType = CommandType.StoredProcedure;
cmd_VN.Parameters.Add("net_mem", OracleDbType.Varchar2, "SDO_NET1", System.Data.ParameterDirection.Input);
cmd_VN.Parameters.Add("isvalid", OracleDbType.Varchar2, System.Data.ParameterDirection.Output);//这里错了?
cmd_VN.ExecuteScalar(); //此处出错
String isValid = (string)((Oracle.DataAccess.Types.OracleString)(cmd_VN.Parameters[1].Value));

OracleCommand cmd_SDP = new OracleCommand("SDO_NET_MEM.NETWORK_MANAGER.SHORTEST_PATH_DIJKSTRA", conn); //Shortest Distance Path
cmd_SDP.CommandType = CommandType.StoredProcedure;
cmd_SDP.Parameters.Add("net_mem", OracleDbType.Varchar2, "SDO_NET1", System.Data.ParameterDirection.Input);
cmd_SDP.Parameters.Add("start_node_id", OracleDbType.Int32, "1", System.Data.ParameterDirection.Input);
cmd_SDP.Parameters.Add("goal_node_id", OracleDbType.Int32, "4", System.Data.ParameterDirection.Input);
cmd_SDP.Parameters.Add("pathid_returned", OracleDbType.Int32, System.Data.ParameterDirection.ReturnValue);

cmd_SDP.ExecuteScalar();
pathid = (string)((Oracle.DataAccess.Types.OracleString)(cmd_SDP.Parameters[3].Value));

}
catch (System.Exception ex)
{
return "ERROR:" + ex.ToString(); //
}
finally
{
OraclePool.Instance.closeConnnection(conn);
}
return pathid;
}



有谁能告诉我怎么写这段代码吗? Oracle is 10gR2. 

作者: hillwolf   发布时间: 2011-11-02

cmd_VN.Parameters.Add("isvalid", OracleDbType.Varchar2, System.Data.ParameterDirection.Output);//output参数应该还要指定长度

作者: tx2730   发布时间: 2011-11-02