【问题标题】:Is it possible to create download link for Left Joined classic report?是否可以为左连接经典报告创建下载链接?
【发布时间】:2018-02-04 17:37:01
【问题描述】:

我在页面中有经典报告,其中包含以下 SQL 查询:

SELECT CELLS.ID, CELLS.NAME, CELLS.NUM, CELLS.AC_ID, AC.SERIAL,AC.FILE_NAME, AC.FILE_DATA
FROM CELLS 
LEFT JOIN AC
ON CELLS.AC_ID = AC.ID
WHERE CELLS.AC_ID IS NOT NULL
ORDER BY CELLS.NUM

我想要AC.FILE_DATA 的下载链接,即BLOB。所以在属性FILE_DATA 列中我设置了以下内容:

Type: Download BLOB
Table Name: AC
BLOB Column: FILE_DATA
Primary Key Column 1: ID

然后页面在经典报告区域的位置生成错误:

错误:ORA-06502:PL/SQL:数字或值错误:字符转数字 转换错误

查看调试日志会显示更多信息:

“AC 区域”中的异常:Sqlerrm:ORA-06502:PL/SQL:数字或值 错误:字符到数字的转换错误回溯:ORA-06512:在 “APEX_050100.WWV_RENDER_REPORT3”,第 7965 行

在左连接中没有AC.FILE_DATA 也不例外。那么在报表查询中使用连接时,我真的可以有 blob 下载列吗?

【问题讨论】:

    标签: oracle-apex


    【解决方案1】:

    据我所知,它与(左)加入无关,而是您创建 下载 链接的方式。它应该是 BLOB 列名,但是:

    dbms_lob.getlength(ac.file_data) download
    

    或者,应用于您的查询,

    SELECT CELLS.ID, 
           CELLS.NAME, 
           CELLS.NUM, 
           CELLS.AC_ID, 
           AC.SERIAL,
           AC.FILE_NAME, 
           --
           dbms_lob.getlength(AC.FILE_DATA) download  --> this
    FROM CELLS 
    LEFT JOIN AC
    ON CELLS.AC_ID = AC.ID
    WHERE CELLS.AC_ID IS NOT NULL
    ORDER BY CELLS.NUM
    

    “下载”栏设置:

    • 类型:下载 BLOB
    • 表名:AC
    • BLOB 列:FILE_DATA
    • 主键列 1:ID

    保存,运行 - 应该没问题。

    【讨论】:

    • 这确实带来了下载链接,但尝试下载它,却给出了500 Internal Server Error,虽然数据、mime 类型和文件名都在那里。
    • 在回答您的问题时,我创建了一个示例(这样我就不会写 stupidities)并毫无问题地下载了图像。不需要 Mime 类型和文件名;他们只是告诉您如何“打开”文件(JPG 使用图像查看器打开,PDF 使用某些 PDF 查看器打开,例如 Adob​​e Acrobat Reader 等),而文件名用于帮助您“保存”文件(否则,它的名称只是“下载”,没有扩展名)。很快:不知道会发生什么。如果可能,请在 apex.oracle.com 上创建一个示例并提供凭据以便我们查看。
    • 我会尝试在 apex.oracle.com 上复制它,但有一点很清楚,当我消除加入并直接使用 SELECT ID, SERIAL, FILE_NAME, dbms_lob.getlength(FILE_DATA) AS FILE_DATA FROM AC 时,下载就可以了。也许与 ID 有关,什么时候应该找到 blob...
    • 在下载 URL 中有一个名为 k1 的参数。当我有无连接查询时,我取了k1 的值,它指向AC 表中的正确ID。然后我在使用左连接查询时查看了k1 值,它指向 CELLS 表中的 ID。如果在列设置中我指定了 AC 表及其 ID,它将如何找到正确的数据?可能是 apex 使用左连接查询中的 ID 来从 AC 表中查找数据,这是完全错误的。但我无法在数据列设置中指定左连接查询...
    • 基本上我的假设是正确的。我所做的是我稍微修改了左连接:SELECT CELLS.ID as CELLID, CELLS.AC_ID as ID... 解决了500 Internal Server Error 并且我能够下载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多