Usm*_*ooq 7 c# oracle stored-procedures
我正在尝试使用C#执行Oracle存储过程(1个输入和2个输出参数).
我的表包含3列; 一个整数id
和2个varchar2类型的列.
这是表定义:
CREATE TABLE TESTTABLE
(
ID INT Not Null,
FNAME VARCHAR2(200),
LNAME VARCHAR2(200),
Constraint PK Primary Key (ID)
);
Run Code Online (Sandbox Code Playgroud)
这是我的存储过程:
create or replace PROCEDURE TESTP
(
tempID IN TESTTABLE.ID%Type,
tempName Out TESTTABLE.NAME%TYPE,
tempLName out TESTTABLE.LNAME%TYPE
)
AS
BEGIN
select Name, LNAME
into tempName, tempLName
from TestTable
where ID = tempID;
END;
Run Code Online (Sandbox Code Playgroud)
以下是从C#执行此过程的代码:
try
{
Int32 id = 1;
string FName = "", LName = "";
using (_ora.GetOracleConnection())
{
Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand("TESTP", _ora.GetOracleConnection());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("tempId", Oracle.DataAccess.Client.OracleDbType.Int32,ParameterDirection.Input).Value = id;
cmd.Parameters.Add("tempName", Oracle.DataAccess.Client.OracleDbType.Varchar2,200,ParameterDirection.Output).Value = FName;
cmd.Parameters.Add("tempLName", Oracle.DataAccess.Client.OracleDbType.Varchar2,200,ParameterDirection.Output).Value = LName;
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这是生成的异常:
Oracle.DataAccess.Client.OracleException ORA-06502:PL/SQL:数字或值错误
ORA-06512:位于"USMANDBA.TESTP"的第9行
谁能帮我 ?
您代码中的这些修改对我有用:
using (connection)
{
Int32 id = 1;
OracleCommand cmd = new OracleCommand("TESTP", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("tempID", OracleDbType.Int32, ParameterDirection.Input).Value = id;
cmd.Parameters.Add("tempName", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
cmd.Parameters.Add("tempLName", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
string FName = cmd.Parameters["tempName"].Value.ToString();
string LName = cmd.Parameters["tempLName"].Value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
您还可以在 Oracle 过程中添加异常块来处理 no_data_found 异常并避免ORA-01403
错误,如下所示:
CREATE OR REPLACE PROCEDURE TESTP (tempID IN TESTTABLE.ID%Type,
tempName out TESTTABLE.NAME%TYPE, tempLName out TESTTABLE.LNAME%TYPE) AS
BEGIN
select Name, LNAME Into tempName,tempLName from TestTable Where ID = tempID;
EXCEPTION WHEN NO_DATA_FOUND THEN
tempName := null;
tempLName := null;
END;
Run Code Online (Sandbox Code Playgroud)
并添加额外的 OUT 参数来通知成功或失败,并在 C# 代码中处理它。
归档时间: |
|
查看次数: |
1344 次 |
最近记录: |