为什么用C#调用过程时会出现Oracle错误

本文关键字:Oracle 错误 调用 过程 为什么 | 更新日期: 2023-09-27 18:00:32

我在Oracle11g:中编写了这个过程

create or replace
PROCEDURE P1 
(
   ID_1 IN NUMBER   
  , P_NAME OUT VARCHAR2  
) AS 
  BEGIN
SELECT NAME_ into  p_name  FROM  A1 WHERE ID=ID_1; 
END P1;

我用C#编写了这段代码来调用程序:

OracleConnection conn = new OracleConnection("User Id=webservice_access;Password=DAMAVAND;Server=ORA11;");
//OracleConnection conn = new OracleConnection("User Id=SYSTEM;Password=123456;Server=ORA11;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "P1";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("ID_1", 1);
cmd.Parameters.Add("p_name", OracleType.VarChar, 16).Direction = ParameterDirection.Output;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters["p_name"].Value.ToString());
cmd.Connection.Close(); 

但是当我运行C#应用程序时,我得到了这个错误:

ORA-06512:在"WEBSERVICE_ACCESS.P1",第10行
ORA-06512:在第1行

发生了什么?为什么我会出现这个错误?

为什么用C#调用过程时会出现Oracle错误

ORA-06512表示过程中存在未处理的异常。您的代码中没有错误处理,所以这是合理的。

当然,因为你没有错误处理,所以任何人都很难知道错误是什么。最有可能的是数据:要么你在A1 where ID=1中没有记录(即no_data_FOUND异常),要么你有多个这样的记录(即TOO_MANY_ROWS异常)。

ODP有一个处理异常的类。了解更多信息。