Oracle APEX、PL/SQL pkg或prc连接多个表以提取数据,并根据页面项值将其作为平面文件下载

xriantvc  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(193)

我正在使用Oracle APEX API,apex_data_export.export上的一个按钮点击下载输出的SQL查询作为一个平面文件通过传递SQL查询通过连接多个表和传递页面项目在哪里子句的p_sql_query参数。由于表数据有数百万条记录,API要么是采取更多的时间来处理输出和下载文件或它是导致超时错误。
因此,想知道是否有任何替代方法来实现这一点,通过自定义pl/sql过程,无论是通过创建一个包或一个过程。感谢任何帮助。
谢谢你,
Richa

8wigbo56

8wigbo561#

Apex不会是我将 * 数百万行 * 加载到Oracle中的第一选择。我会使用SQL*Loader。该实用程序非常非常快。
在与您的数据库版本相关的Oracle文档中阅读它(尽管,多年来大多数基本功能没有太大变化)。
基本上,

  • 创建控制文件(它 * 指示 * 该实用程序导入哪个文件以及如何导入)
  • 从操作系统命令行执行它
  • 如何在Oracle中执行此操作?一种方法是创建一个存储过程,然后由DBMS_SCHEDULER内置包调用该存储过程
  • 一旦数据被加载到目标表中,您就有足够的时间用您将要编写的PL/SQL程序(很可能是存储过程)来解析它,并做任何您想做的事情
    **[编辑]**实际上,事实证明,你想 * 导出 * 数据,而不是 * 导入 *。我不知道是什么让我有不同的想法;但是,如果你想听听我对 * 导入 * 的看法,你已经得到了:)

出口时:我建议你写一个存储过程,它利用内置的UTL_FILE包,并利用其功能创建文件。缺点是它将被创建在一个文件夹中,(最有可能)驻留在数据库服务器上,因此您必须与DBA讨论如何创建它,创建Oracle目录,给将要使用它的用户授予读/写权限,然后**你就可以使用它了。读:创建一个导出文件。
有什么好的?它是一个PL/SQL程序单元,它允许你做各种事情--不仅连接任意数量的表,而且还可以执行某些计算(如果你必须这样做的话),一旦你准备好了一切--在结果文件中放一行(这里我们还有另一个缺点:你会一行一行地做)。
但是,尝试它不会花费太多。DBA可以在一两分钟内完成他们的工作。您将在半小时内编写一个过程。给予一个尝试。

vohkndzv

vohkndzv2#

看看zip_util,它是开源APEXIR_XLSX APEX插件的一部分,可以从交互式报表创建Excel电子表格。我们在工作中经常使用该插件;我偶尔会浏览一下zip-util的代码,我认为它可以单独使用来做你想做的事情。

相关问题