2016-04-13 8 views
1

Ich benutze GetSchema, um eine Liste von Prozeduren aus meiner Oracle-Umgebung zu laden, aber ich sehe nur root-Prozeduren, keine Paketprozeduren. Durch die Dokumentation schauend, sehe ich nicht, wie sie sonst zurückgegeben werden könnten. Weiß jemand, ob es einen Filter/eine Einschränkung gibt, um Paketprozeduren zu erhalten, oder sollte ich einen anderen Objekttyp aufrufen?Oracle GetSchema() nicht Paketprozeduren

Dim ObjectType= "Procedures" 
Dim Options As String() 

Dim ObjectsTable = OracleConnection.GetSchema(ObjectType, Options) 

Sample 'Pakete' Ergebnisse

?RefinedPackageSchemaData(10) 
Count = 12 
    (0): {[OWNER, #REDACTED SCHEMA NAME#]} 
    (1): {[OBJECT_NAME, #REDACTED PACKAGE NAME#]} 
    (2): {[SUBOBJECT_NAME, ]} 
    (3): {[OBJECT_ID, 130652]} 
    (4): {[DATA_OBJECT_ID, ]} 
    (5): {[LAST_DDL_TIME, 4/27/2015 3:52:26 PM]} 
    (6): {[TIMESTAMP, 2015-04-27:15:52:26]} 
    (7): {[STATUS, VALID]} 
    (8): {[TEMPORARY, N]} 
    (9): {[GENERATED, N]} 
    (10): {[SECONDARY, N]} 
    (11): {[CREATED, 1/9/2015 9:47:50 AM]} 

Die Anzahl der Zeilen genau auf die Anzahl der Pakete entspricht, nicht Paket + Verfahren Kombinationen

Sample 'PackageBodies' Ergebnis

?RefinedPackageBodySchemaData(10) 
    Count = 12 
     (0): {[OWNER, #REDACTED SCHEMA NAME#]} 
     (1): {[OBJECT_NAME, #REDACTED PACKAGE NAME#]} 
     (2): {[SUBOBJECT_NAME, ]} 
     (3): {[OBJECT_ID, 130653]} 
     (4): {[DATA_OBJECT_ID, ]} 
     (5): {[LAST_DDL_TIME, 4/27/2015 4:19:44 PM]} 
     (6): {[TIMESTAMP, 2015-04-27:16:19:44]} 
     (7): {[STATUS, VALID]} 
     (8): {[TEMPORARY, N]} 
     (9): {[GENERATED, N]} 
     (10): {[SECONDARY, N]} 
     (11): {[CREATED, 1/9/2015 9:48:02 AM]} 

Die Anzahl der Zeilen genau auf die Anzahl der Pakete entspricht, nicht Paket + Verfahren Kombinationen

MSDN Oracle GetSchema Reference

+0

Würden Sie nicht wollen, dass die Objecttype „Packages“ zu sein ? Die öffentlichen Methoden sollten die "subobject_name" -Werte sein. –

+0

@JustinCave auf Ihren Vorschlag Ich habe das versucht, aber ich bekomme nur entsprechende Pakete, nicht eine vollständige Liste der Paket-Prozedur-Kombinationen –

Antwort

1

Es ist wie die einzige Möglichkeit sieht, dies zu tun ist, um die Argumente oder Procedure Schema abzufragen, und gruppieren Sie die Ergebnisse , Verwerfen der tatsächlichen Argumente/Parameterinformationen.

Ich habe es wie folgt aus:

Dim ArgumentsSchemaData = 
    GetSchemaDictionary(Connection, "Arguments", New String() {"#REDACTED SCHEMA NAME#"}) 

Dim GroupedArguments = (
    From ASD In ArgumentsSchemaData 
    Let FullObjectName = 
     String.Format("{0}.{1}", ASD("PACKAGE_NAME"), ASD("OBJECT_NAME")) 
    Group ASD By FullObjectName Into ON_Group = Group 
    Order By FullObjectName 
    Select FullObjectName 
    ).ToList 

Mit einer separaten Hilfsfunktion von Datatable in eine Liste der Wörterbücher zu schwenken:

Private Shared Function GetSchemaDictionary(
     ByRef Connection As IDbConnection, 
     ByVal ObjectType As String, 
     ByRef Options As String() 
     ) As List(Of Dictionary(Of String, Object)) 

     Dim SchemaObjectsList = GetSchemaObjectsList(Connection, ObjectType, Options) 

     Dim Columns = (
      From C In SchemaObjectsList.Columns 
      Let ColumnName = C.ToString 
      Select ColumnName 
      ).ToList 

     Return (
      From OL In SchemaObjectsList 
      Select Columns.ToDictionary(
       Function(C) C, 
       Function(C) OL.Item(C) 
      )).ToList 
    End Function