2016-04-13 36 views
1

Oracle ortamımdan yordamların bir listesini yüklemek için GetSchema kullanıyorum, ancak yalnızca kök yordamlarını, paket yordamlarını görüyorum. Belgelere baktığımda, başka nasıl iade edilebileceğini göremiyorum. Paket provaları almak için bir filtre/kısıtlama olup olmadığını bilen var mı yoksa farklı bir nesne türünü mi çağırmalıyım?Oracle GetSchema() paket yordamlarını iade etmiyor

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

Dim ObjectsTable = OracleConnection.GetSchema(ObjectType, Options) 

Örnek 'Paketler' Sonuçlar

?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]} 
satır sayısı paketlerinin tam numarasına karşılık gelen

değil, paket + prosedür kombinasyonları

Örnek 'PackageBodies' Sonuç

?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]} 
sıra sayısı paketlerinin tam sayıya tekabül

değil, paket + prosedür kombinasyonları

MSDN Oracle GetSchema Reference

+0

Eğer NesneTürü "Paketler" olmak istemem: sözlükler bir Listesine DataTable dan dönmesine ayrı yardımcı fonksiyonla

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 

? Kamu yöntemleri "subobject_name" değerleri olmalıdır. –

+0

@JustinCave önerinizde bunu denedim, ancak sadece ilgili paketleri aldım, paket-prosedür kombinasyonlarının tam listesi değil –

cevap

1

Sadece bu Argümanlar ya ProcedureParameters şemayı sorgulamak için yapmanın yolu ve grubun sonuçları benziyor gerçek Bağımsız Değişken/Parametre bilgilerinin atılması.

böyle yaptım:

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