【发布时间】:2014-04-19 16:53:54
【问题描述】:
我正在尝试从 C# 调用 oracle 存储过程“spValidateDBA”,但我总是收到错误消息 - “PLS-00306:调用“SPVALIDATEDBA”时参数的数量或类型错误” .
在尝试从 C# 调用存储过程参数“UserRole”时可能会出现此问题,它的类型在 C# 代码中设置不正确,我不知道如何正确设置。有人可以帮帮我吗在这里,我真的需要尽快解决这个问题。
C#代码:-
string a = txtUsrId.Text.ToUpper();
string sConnectionString = "Data Source=XE;User ID=sys;Password=system;DBA
PRIVILEGE=sysdba";
OracleConnection myConnection = new OracleConnection(sConnectionString);
OracleCommand myCommand = new OracleCommand("spValidateDBA", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "spValidateDBA";
myCommand.Parameters.Add("UserId", OracleDbType.Varchar2, 50);
myCommand.Parameters["UserId"].Value = a;
myCommand.Parameters.Add("UserRole",OracleDbType.Varchar2, 50).Direction =
ParameterDirection.Output;
myCommand.Parameters.Add("UserIdOut", OracleDbType.Varchar2, 50).Direction =
ParameterDirection.Output;
var rolechk = false;
string checkrole = "DBA";
myConnection.Open();
myCommand.ExecuteReader();
//this is where i'm getting the error "PLS-00306: wrong number
//or types of arguments in call to 'SPVALIDATEDBA'"
存储过程 spValidateDBA
create or replace PROCEDURE spValidateDBA(
UserId IN VARCHAR2,
UserRole OUT STRING_ARRAY,
UserIdOut OUT VARCHAR2)
AS
BEGIN
EXECUTE IMMEDIATE 'select GRANTED_ROLE bulk collect into UserRole from DBA_USERS DU,DBA_ROLE_PRIVS DRP where DU.USERNAME=UserId AND DU.USERNAME=DRP.GRANTEE';
EXECUTE IMMEDIATE 'select USERNAME into UserIdOut from DBA_USERS DU where DU.USERNAME=UserId';
END spValidateDBA;
STRING_ARRAY 是此语句中声明的字符串数组类型:
CREATE TYPE STRING_ARRAY AS TABLE OF VARCHAR2(50);
如有任何问题,请告诉我。
【问题讨论】:
标签: c# sql oracle stored-procedures