我被要求创建一个 pl/sql 过程,该过程将接受 select 语句作为输入参数。必须从查询中获取所有数据并在 DBMS_OUTPUT 中打印。
我研究了本机动态 SQL 和 DBMS_SQL,但无法弄清楚如何从结构未知的表中获取和处理数据。
由于将在运行时提供表名,我只想知道如何存储从查询中获取的数据,因为我无法定义变量或集合,因为表的结构是未知的
首先,这个要求似乎非常可疑。您永远不应该依赖写入DBMS_OUTPUT
缓冲区的数据——启用缓冲区、确保缓冲区足够大以及将缓冲区中的数据显示给用户完全取决于客户端。默认情况下,这些都不会发生。编写一个过程来操作一个结构完全未知的表是非常不寻常的。
但是,如果您真的下定决心,您可能希望使用 Tom Kyte 的SQL Unloader,它用于DBMS_SQL
将任意查询中的数据写入平面文件并修改它以将其写入DBMS_OUTPUT
。
有一个用于在 PL/SQL 中生成 Excel 可读文件的开源实用程序包。
https://code.google.com/p/plsql-utils/
但是,如果可能的话,我建议您考虑为您的工具使用更通用的语言。PL/SQL 对于数据库逻辑非常有用,但对于与外部世界的交互,我希望您将使用 Python 或 Java 之类的东西实现更易于维护的解决方案。
虽然,一如既往的 YMMV :-)