空 Oracle REF CURSOR 中的列名
从 REF CURSOR
中找出一行中每一列的名称/值对:
在 PL/SQL 中,我可以使用类似这样的技巧, com/questions/6265160/to-char-of-an-oracle-pl-sql-table-type">Oracle PL/SQL TABLE 类型的 TO_CHAR
这是一个很棒的技巧。但当 REF CURSOR
为空时,它不起作用,比如这里的这个(这只是一个例子。真正的光标不会从 DUAL
中选择)
OPEN cursor FOR SELECT 1 FROM DUAL WHERE 1 = 0;
:空的REF CURSOR
甚至有列名称/类型信息?
In PL/SQL, I can use a trick like this one here to find out name/value pairs for every column in a row from a REF CURSOR
:
TO_CHAR of an Oracle PL/SQL TABLE type
That's an awesome trick. But it doesn't work when the REF CURSOR
is empty, such as this one here (that's just an example. The real cursor doesn't select from DUAL
):
OPEN cursor FOR SELECT 1 FROM DUAL WHERE 1 = 0;
Does an empty REF CURSOR
even have column name/type information?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,我已经尝试过没有行的解决方案,你是对的。
从我有限的角度来看,我认为这里我们需要两种不同的方法来检索列的名称和值。
1) Dbms_sql 包来检索列的名称。
2)tbone 检索数据的方法。
过程
测试
结果
Yes, I've tried that solution without rows, and you're right.
From my limited point of view, I think here we need two different methods to retrieve columns' names and values.
1) Dbms_sql package to retrieve the columns' names.
2) The tbone method to retrieve the data.
Procedure
Test
Result
AFAIK,无法直接从 PL/SQL 中从 REF CURSOR 获取元数据。奇怪的是,
REF CURSOR
映射到 Java 的ResultSet
,可以通过调用其ResultSet.getMetaData
方法来查询元数据。因此,您可以生成 Java 的存储过程来为您执行此操作。 在这里您可以找到一个示例。
另一种选择是使用 DBMS_SQL.TO_CURSOR_NUMBER(仅在 11g 中)将游标转换为数字游标,可以使用 DBMS_SQL 包。
AFAIK, there is no way of getting metadata from a
REF CURSOR
directly from PL/SQL. Curiously, aREF CURSOR
maps to a Java'sResultSet
, which can be queried for metadata calling itsResultSet.getMetaData
method.So you could generate a Java's stored procedure to do that for you. Here you can find an example.
Another option is convert the cursor to a numeric cursor using
DBMS_SQL.TO_CURSOR_NUMBER
(only in 11g), which can be asked for metadata with the DBMS_SQL package.