Dans les grands systèmes de bases de données, les procédures stockées et les déclencheurs jouent un rôle important. Qu'il s'agisse d'une procédure stockée ou d'un déclencheur, il s'agit d'un ensemble d'instructions SQL et d'instructions de contrôle de flux.
Code ORACLE
CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as BEGIN a:='test'; OPEN MYCS1 FOR SELECT 1 from dual; OPEN MYCS2 FOR SELECT 2 from dual; END;
Code C#
/// <summary> /// 执行oracle存储过程返回多个结果集 /// </summary> /// <param name="strProcName">存储过程名称</param> /// <param name="ResultCount">返回个数</param> /// <param name="paras">参数</param> /// <returns>任意对象数组</returns> public object[] ExcuteProc_N_Result(string strProcName, int ResultCount, params OracleParameter[] paras) { using (OracleConnection conn = new OracleConnection("User ID=用户名;Password=密码;Data Source=数据库;")) { OracleCommand cmd = new OracleCommand(strProcName, conn); if (paras != null && paras.Length > 0) { for (int j = 0; j < paras.Length; j++) { if (paras[j].Value == null) { paras[j].Value = DBNull.Value; } } } cmd.Parameters.AddRange(paras); cmd.CommandType = CommandType.StoredProcedure; conn.Open(); cmd.ExecuteNonQuery(); int i = 0; //int nOutputParametersCount = 0; object[] objResult = new object[ResultCount]; foreach (OracleParameter p in cmd.Parameters) { if (p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput) { if (p.Value is OracleDataReader) { OracleDataReader reader = p.Value as OracleDataReader; objResult[i++] = ConvertDataReaderToDataTable(reader); } else { objResult[i++] = p.Value; } } } return objResult; } } /// <summary> /// 将DataReader 转为 DataTable /// </summary> /// <param name="DataReader">OleDbDataReader</param> protected DataTable ConvertDataReaderToDataTable(OracleDataReader reader) { DataTable objDataTable = new DataTable("TmpDataTable"); try { int intFieldCount = reader.FieldCount;//获取当前行中的列数; for (int intCounter = 0; intCounter <= intFieldCount - 1; intCounter++) { objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter)); } //populate datatable objDataTable.BeginLoadData(); //object[] objValues = new object[intFieldCount -1]; object[] objValues = new object[intFieldCount]; while (reader.Read()) { reader.GetValues(objValues); objDataTable.LoadDataRow(objValues, true); } reader.Close(); objDataTable.EndLoadData(); return objDataTable; } catch (Exception ex) { throw new Exception("转换出错出错!", ex); } }
Méthode d'appel
OracleParameter[] oracleParameter = new OracleParameter[]{ new OracleParameter("MYCS1",OracleType.Cursor), new OracleParameter("MYCS2",OracleType.Cursor), new OracleParameter("a",OracleType.VarChar,200), }; oracleParameter[0].Direction = ParameterDirection.Output; oracleParameter[1].Direction = ParameterDirection.Output; oracleParameter[2].Direction = ParameterDirection.Output; object[] xxx = ExcuteProc_N_Result("gd_CURSOR", 3, oracleParameter);
Le contenu ci-dessus présente les procédures stockées Oracle dans asp.net via le code.
Ensuite, je vais vous présenter la procédure stockée Oracle (image et texte) via la deuxième méthode.
Veuillez consulter les méthodes et étapes suivantes
Étape 1 : Configurez la base de données qui doit être connectée via le Net Manager fourni avec ORACLE, telle que COST
Étape 2 : Ouvrez l'outil de base de données PL/SQL, entrez le nom d'utilisateur et le mot de passe corrects, puis cliquez sur OK pour saisir l'utilisateur qui doit créer la procédure stockée
Étape 3 : Comprendre le format des procédures stockées générales
créer ou remplacer le nom de la procédure stockée de la procédure (type param1 in, type param2 out)
comme
Type de variable 1 (plage de valeurs);
Type de variable 2 (plage de valeurs);
Commencer
Bloc de déclaration
Exception --Gestion des exceptions
Quand d'autres alors
Restaurer ;
Fin ;
Étape 4 : Saisir la procédure stockée à créer dans l'interface de saisie SQL
create or replace procedure sp_demo(param1 in varchar2,param2 out varchar2) /* * 存储过程实例 */ as cnt int; rst varchar2(100) Begin Select count(*) into cst from Tab_Demo where Col_Value = param1; If (cst > 0) then --判断条件 param2 := '有匹配的值'; Else param2 := '无匹配的值'; End if; Exception When others then Rollback; End;
Comme indiqué ci-dessous
Étape 5 : Tester la procédure stockée qui vient d'être écrite
exec sp_demo('male');
FIN
Remarques
Vous ne pouvez pas supprimer une procédure stockée dans une autre procédure stockée, vous pouvez uniquement appeler une autre procédure stockée
Si vous utilisez créer ou remplacer une procédure, lors de la création de la procédure stockée, veillez à ne pas avoir le même nom que la procédure stockée existante sous l'utilisateur, ce qui entraînerait l'écrasement de la procédure stockée actuelle
Les paramètres de procédure stockée n'ont pas de plage de valeurs, in signifie entrant, out signifie sortie
Ce qui précède présente les procédures stockées Oracle de deux manières. J'espère que cela sera utile à tout le monde.