2016-04-13 3 views
1

私はOracle環境からプロシージャのリストをロードするためにGetSchemaを使用していますが、ルート・プロシージャとパッケージ・プロシージャは表示されません。ドキュメントを見ても、返される可能性のあるものは他にありません。誰もが、パッケージprocsを取得するフィルタ/制限があるかどうか、または私は別のオブジェクト型を呼び出す必要があります知っていますか?Oracle GetSchema()でパッケージ・プロシージャが返されない

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

Dim ObjectsTable = OracleConnection.GetSchema(ObjectType, Options) 

サンプル 'パッケージ' の結果

?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]} 
行の数がパッケージの正確数に相当

、ないパッケージ+手順の組み合わせ

サンプル 'PackageBodies' 結果

?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]} 

行の数がパッケージの正確数に対応し、+手続きの組み合わせ

MSDN Oracle GetSchema Reference

+0

あなたはのObjectTypeは、「パッケージ」になりたいと思いません? publicメソッドは 'subobject_name'値でなければなりません。 –

+0

あなたの提案で@JustinCave私はそれを試みましたが、私は対応するパッケージを取得するだけで、パッケージ - プロシージャの組み合わせの完全なリストではありません –

答えて

1

をパッケージしないことは、結果を、これを行うための唯一の方法は、引数またはProcedureParametersスキーマを照会することがあるように見える、とグループ実際の引数/パラメータ情報は破棄されます。

私はこのようにそれをやった:のDataTableから辞書のリストに旋回するように、別のヘルパー機能付き

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 

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 
関連する問題