Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Oracle GetSchema()未返回包过程_.net_Oracle_Ado.net_Odp.net_Getschema - Fatal编程技术网

.net Oracle GetSchema()未返回包过程

.net Oracle GetSchema()未返回包过程,.net,oracle,ado.net,odp.net,getschema,.net,Oracle,Ado.net,Odp.net,Getschema,我正在使用GetSchema从Oracle环境中加载过程列表,但是我只看到根过程,没有看到包过程。但是,通过查看文档,我看不出还有什么其他方法可以返回它们。是否有人知道获取包过程是否存在筛选器/限制,或者我是否应该调用其他对象类型 Dim ObjectType= "Procedures" Dim Options As String() Dim ObjectsTable = OracleConnection.GetSchema(ObjectType, Options) 样本“套餐”结果 ?Re

我正在使用GetSchema从Oracle环境中加载过程列表,但是我只看到根过程,没有看到包过程。但是,通过查看文档,我看不出还有什么其他方法可以返回它们。是否有人知道获取包过程是否存在筛选器/限制,或者我是否应该调用其他对象类型

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]}
行数正好对应于包数,而不是包+过程组合

样本“包装体”结果

 ?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]}
行数正好对应于包数,而不是包+过程组合


看起来唯一的方法是查询参数或过程参数架构,并对结果进行分组,丢弃实际的参数/参数信息

我是这样做的:

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
使用单独的帮助器函数将DataTable转换为字典列表:

 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

您不希望对象类型为“包”吗?公共方法应该是
子对象\u name
值。@根据您的建议,我确实尝试过,但是我只得到了相应的包,而不是包过程组合的完整列表