.net Oracle GetSchema()未返回包过程
我正在使用GetSchema从Oracle环境中加载过程列表,但是我只看到根过程,没有看到包过程。但是,通过查看文档,我看不出还有什么其他方法可以返回它们。是否有人知道获取包过程是否存在筛选器/限制,或者我是否应该调用其他对象类型.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
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
值。@根据您的建议,我确实尝试过,但是我只得到了相应的包,而不是包过程组合的完整列表