可能会有业务逻辑问题而且会带输出 参数,可是nhibernate好像不支持out 配置(我没找到不知道有没有)换了个方法来执行
//user_ID in integer, // user_Name in varchar2, // user_Pwd in varchar2, // msg out varchar2 factoryImp = factory as ISessionFactoryImplementor; using (IDbConnection con = factory.OpenSession().Connection) { using (IDbCommand cmd = con.CreateCommand()) { IDbTransaction trans = con.BeginTransaction(); cmd.CommandText = "apps.pkg_Users.Op_AddUser"; cmd.CommandType = CommandType.StoredProcedure; IDbDataParameter pars0 = cmd.CreateParameter(); pars0.DbType = DbType.Int32; pars0.Direction = ParameterDirection.Input; pars0.Value = 12; pars0.ParameterName = "user_ID"; cmd.Parameters.Add(pars0); IDbDataParameter pars1 = cmd.CreateParameter(); pars1.DbType = DbType.String; pars1.Direction = ParameterDirection.Input; pars1.Value = 12; pars1.ParameterName = "user_Name"; cmd.Parameters.Add(pars1); IDbDataParameter pars2 = cmd.CreateParameter(); pars2.DbType = DbType.String; pars2.Direction = ParameterDirection.Input; pars2.Value = 12; pars2.ParameterName = "user_Pwd"; cmd.Parameters.Add(pars2); IDbDataParameter pars3 = cmd.CreateParameter(); pars3.DbType = DbType.String; pars3.Direction = ParameterDirection.Output; pars3.ParameterName = "msg"; pars3.Size = 100; cmd.Parameters.Add(pars3); cmd.ExecuteNonQuery(); if (pars3.Value.ToString() == "Y") trans.Commit(); else trans.Rollback(); }
create or replace package body pkg_Users as procedure query_UserByID(cur_no out curs, user_ID in integer) as begin open cur_no for select * from apps.users t where t.id > user_id; end; procedure Op_AddUser( user_ID in integer, user_Name in varchar2, user_Pwd in varchar2, msg out varchar2) as begin msg:='Y'; insert into apps.users (id, user_name, user_pwd) values (user_ID, user_Name, user_Pwd); exception when others then rollback; msg := 'N'; end; end;
create or replace package pkg_Users as type curs is ref cursor; procedure query_UserByID(cur_no out curs, user_ID in integer); procedure Op_AddUser( user_ID in integer, user_Name in varchar2, user_Pwd in varchar2, msg out varchar2); end;