如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?
Posted
技术标签:
【中文标题】如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?【英文标题】:How to fetch data dynamically from an oracle table whose structure is known only at runtime using pl sql procedure? 【发布时间】:2013-04-13 06:55:08 【问题描述】:我被要求创建一个 pl/sql 过程,该过程将接受 select 语句作为输入参数。所有数据都必须从查询中获取并打印在 DBMS_OUTPUT 中。
我研究了原生动态 SQL 和 DBMS_SQL,但无法弄清楚如何从结构未知的表中获取和处理数据。
由于将在运行时提供表名,我只想知道如何存储从查询中获取的数据,因为我无法定义变量或集合,因为表的结构是未知的
【问题讨论】:
由于表名将在运行时提供,我只想知道如何存储从查询中获取的数据,因为我无法定义变量或集合,因为表的结构是未知的..please帮助.. 其中一个 xxx_TAB_COLUMNS 视图(xxx in ('USER', 'ALL', 'DBA'))将成为您的好友。 【参考方案1】:首先,这个要求似乎非常可疑。您永远不应依赖写入DBMS_OUTPUT
缓冲区的数据——启用缓冲区、确保缓冲区足够大以及将缓冲区中的数据显示给用户完全取决于客户端。默认情况下,这些都不会发生。编写一个过程来操作一个结构完全未知的表是非常不寻常的。
但是,如果您真的下定决心,您可能希望使用 Tom Kyte 的 SQL Unloader,它使用 DBMS_SQL
将来自任意查询的数据写入平面文件并修改它以将其写入 DBMS_OUTPUT
。
【讨论】:
实际上我应该创建一个提取行的 excel 数据文件..为简单起见,我只是提到了 DBMS_OUTPUT.. 我同意@Justin 的观点。 PL/SQL 不是您正在寻找的工具。您需要寻找将查询加载到 excel 中的方法。您可以通过在 excel 中定义数据源到 oracle 并直接加载来做到这一点。在 google 中搜索 excel 数据源。 @APPSfreak - 如果“更容易”是指“不使用DBMS_SQL
”,则不。如果列的数量和类型未知,则需要DBMS_SQL
的灵活性。这确实使您的 PL/SQL 比正常情况复杂得多,但这就是您为这种级别的灵活性付出的代价。这就是要求没有多大意义的原因之一。【参考方案2】:
有一个用于在 PL/SQL 中生成 Excel 可读文件的开源实用程序包。
https://code.google.com/p/plsql-utils/
但是,如果可能的话,我建议您考虑为您的工具使用更通用的语言。 PL/SQL 对于数据库逻辑非常有用,但对于与外部世界的交互,我希望您将使用 Python 或 Java 等实现更易于维护的解决方案。
虽然,一如既往的 YMMV :-)
【讨论】:
以上是关于如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL 或 PL/SQL:如何仅在上升趋势或下降趋势结束时识别烛台形态并在列中设置标志?
运行时解析 PL/SQL 的 Oracle Apex Cards 视图