中中oracle 存存储储过过程程 ((图图文文))
在大型数据库系统中,存储过程和触发器具有很重要的作用。 论是存储过程还是触发器,都是SQL 语句和流程控制语句的集
合。
ORA CLE代代码码
CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a
out varchar)a
BEGIN
a:='te t ';
OPEN MYCS1 FOR
SELECT 1 from dual;
OPEN MYCS2 FOR
SELECT 2 from dual;
END;
C#代代码码
/// < ummary>
/// 执行oracle存储过程返回多个结果集
/// ummary>
/// 存储过程名称
/// 返回个数
/// 参数
/// 任意对象数组
public object[] ExcuteProc_N_Re ult( tring trProcName, int Re ultCount, param Oracle
Parameter[] para )
{
u ing (OracleConnection conn = new OracleConnection("U er ID=用户名;Pa word=密码;Data
Source=数据库;"))
{
OracleCommand cmd = new OracleCommand( trProcName, conn);
if (para != null && para .Length > 0)
{
for (int j = 0; j < para .Length; j++)
{
if (para [j].Value == null)
{
para [j].Value = DBNull.Value;
}
}
}
cmd.Parameter .AddRange(para );
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery();
int i = 0;
//int nOutputParameter Count = 0;
object[] objRe ult = new object[Re ultCount];
foreach (OracleParameter p in cmd.Parameter )
{
if (p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.In
putOutput)
{
if (p.Value i OracleDataReader)
{
OracleDataReader reader = p.Value a OracleDataReader;
objRe ult[i++] = ConvertDataReaderToDataTable(reader);
}
el e
{
objRe ult[i++] = p.Value;
}
}
}
return objRe ult;
}
}
/// < ummary>
/// 将DataReader 转为 DataTable
/// ummary>
///