protected override void DoDiscoverWork(object sender, DoWorkEventArgs e) { string sql = @"SELECT O.object_name, O.created, O.last_ddl_time, O.status, S.text FROM dba_objects O JOIN dba_source S ON S.owner = O.owner AND S.name = O.object_name AND S.type = O.object_type AND S.line = 1 WHERE O.owner = '" + schemaName + @"' AND O.object_type = 'PROCEDURE' ORDER BY O.object_name"; Logger.WriteLine(sql); using (var cmd = new OracleCommand(sql, dbase.OraConnection)) { try { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { Logger.WriteLine(reader.GetString(0)); var procedure = new SchemataProcedure(dbase, srvnode, reader.GetString(0)); procedure.AddProperty("Name", reader.GetString(0)); procedure.AddProperty("Created", reader.GetDateTime(1).ToString()); procedure.AddProperty("Last DDL Time", reader.GetDateTime(2).ToString()); procedure.AddProperty("Status", reader.GetString(3)); string preamble = reader.GetString(4).ToString().Trim().ToLower(); procedure.IsWrapped = preamble.Contains("wrapped"); procedure.AddProperty("Wrapped", procedure.IsWrapped ? "Yes" : "No"); if (reader.GetString(3) == "INVALID") { procedure.ForeColor = System.Drawing.Color.Red; } procedure.Nodes.Add(new TreeNode()); discoveries.Add(procedure); } reader.Close(); } } catch (Exception exc) { River.Orqa.Dialogs.ExceptionDialog.ShowException(exc); } } }
//======================================================================================== // Discover() // If an inheritor allows discoveries (HasDiscovery == true), then the inheritor // should override this method to propulate its Nodes collections. //======================================================================================== internal override void Discover() { if (Logger.IsEnabled) { Logger.WriteSection(Text + " PROCEDURES"); } Statusbar.Message = "Discovering package procedures..."; Nodes.Clear(); string sql = "SELECT owner, object_name, procedure_name" + " FROM all_procedures" + " WHERE owner='" + schemaName + "' AND object_name='" + Text + "' ORDER BY procedure_name"; if (Logger.IsEnabled) { Logger.WriteLine(sql); } OracleCommand cmd = new OracleCommand(sql, dbase.OraConnection); try { OracleDataReader reader = cmd.ExecuteReader(); if (reader.FieldCount == 0) { // TODO: ((SchemaTree)this.TreeView).UnlockWindow(); } else { int count = 1; string name = null; string prev = null; SchemataProcedure proc; while (reader.Read()) { // Not sure why we soemtimes get null function names... // They don't appear to relate to actual functions! if (reader[2] != DBNull.Value) { name = reader.GetString(2); Logger.WriteLine(schemaName + "." + name); proc = new SchemataProcedure(dbase, srvnode, name); proc.AddProperty("Name", name); proc.AddProperty("Owner", reader.GetString(0)); proc.AddProperty("Object", reader.GetString(1)); if (name.Equals(prev)) { count++; } else { count = 1; } proc.Overload = count; prev = name; Nodes.Add(proc); } } } reader.Close(); reader.Dispose(); reader = null; Statusbar.Message = String.Empty; } catch (Exception exc) { River.Orqa.Dialogs.ExceptionDialog.ShowException(exc); } cmd.Dispose(); cmd = null; isDiscovered = true; }