从记录集合类型中选择数据
我在 oracle 11g 服务器中有一个存储过程,它有一个记录变量。 我无法编辑此过程。 我正在创建一个函数,它将调用该过程并返回记录集中的信息。 我查看了此处提出的以下问题: 过去的问题
我的问题是我可以创建一个记录的表类型并直接在 SQL 中查询? 或者我需要将记录转换为类型对象并创建一个表类型以供其直接查询?
I have a stored proc in oracle 11g server that has an out variable of record. I cannot edit this procedure. I am creating a function that will call the procedure and return the information in the record set. I looked at the following question asked here: past question
My Question is can I create a type of table for a record and query it directly in SQL? Or do I need to convert the record to type object and create a table type for it to query directly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
RECORD 是一个 PL/SQL 概念。 因此我们不能基于 RECORD 创建 TABLE TYPE 并在 SQL 语句中使用该 TYPE。 SQL 仅识别在 SQL 中创建的类型。
因此,如果我正确理解您的场景,您需要在 SQL 中创建一个对象和/或一个嵌套表。 然后您的函数可以调用该过程并将 RECORD 转换为嵌套表。 然后可以返回或管道化嵌套表。
RECORD is a PL/SQL concept. So we cannot create a TABLE TYPE based on a RECORD and use that TYPE in a SQL statement. SQL only recognises TYPEs which are created in SQL.
So, if I understood your scenario correctly, you need to create an object and/or a nested table in SQL. Then your function can call the procedure and translate the RECORD to the nested table. The nested table can then be returned or pipelined.
您的链接指向的问题标记为
Oracle
,因此我假设这就是您正在使用的问题。最简单的方法可能是返回一个
CURSOR
:The question your link points to is tagged
Oracle
, so I'm assuming that's what you're using.The easiest way is probably returning a
CURSOR
:最终解决这个问题的方法是根据存储过程逻辑创建一个视图并直接从中查询。
What ended up doing for this problem was to create a view based on the stored procedure logic and query directly from it.
如果您只收到一条记录并且知道记录定义,则应该能够直接按名称访问记录字段。
例如:
当您有 myrecord 类型的记录时,您可以按如下方式引用 itemA:
请注意,您可以在调用代码中通过简单地处理原始过程返回的记录类型来解决此问题。
if you are receiving only one record and you know the record definition, you should be able to the field of the record directly by name.
for example:
when you have a record of myrecord type, you can reference itemA in a manner like this:
note that you may be able to get around this in your calling code be simply handling the record type that the original procedure returns.
你可以尝试一下vararray。
首先 -
并创建您的变量
现在您可以使用 varr_addr 返回工作。 一个例子:
现在你需要从你调用的地方正确配置输出变量。你可以像你一样从表(VARIABLE_NAME)中选择。
You can try varray.
First -
And create your varray as
Now you can return work with varr_addr. An example:
Now you need have the out variable configured correctly from where you call.And you can select from table(VARIABLE_NAME) as you would do.