Oracle apex 是否可以为左侧加入的经典报告创建下载链接?

Oracle apex 是否可以为左侧加入的经典报告创建下载链接?,oracle-apex,Oracle Apex,我在页面中有经典报告,其中包含以下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\u DATA的下载链接,它是BLOB。因此,在属性FI

我在页面中有经典报告,其中包含以下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\u DATA
的下载链接,它是BLOB。因此,在属性
FILE\u 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:numeric或value 错误:字符到数字转换错误回溯:ORA-06512:at “APEX_050100.WWV_渲染报告3”,第7965行


如果左连接中没有
AC.FILE\u数据
,则没有例外。那么,在报表查询中使用连接时,我真的可以拥有blob下载列吗?

据我所知,它与(左)连接无关,只是与创建下载链接的方式有关。它不应该是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列:文件\u数据
  • 主键列1:ID

保存,运行-应该很好。

这确实带来了下载链接,但尝试下载它时,会出现
500内部服务器错误
,尽管数据、mime类型和文件名都在那里。在回答您的问题时,我创建了一个示例(这样我就不会写愚蠢的东西),并毫无问题地下载了图像。Mime类型和文件名不是必需的;他们只是告诉你如何“打开”文件(JPG是用图像查看器打开的,PDF是用一些PDF查看器打开的,如Adobe Acrobat Reader等),而文件名是用来帮助你“保存”文件的(否则,文件名只是“下载”,没有扩展名)。简:不知道会发生什么。如果可能的话,在apex.oracle.com上创建一个示例,并提供凭据,以便我们能够看到它。我将尝试在apex.oracle.com上复制它,但有一点是明确的,当我消除连接并直接使用
时,选择ID、SERIAL、FILE_NAME、dbms_lob.getlength(FILE_DATA)作为来自AC的FILE_数据,然后下载就可以了。也许与ID有关,当它应该找到blob时…在下载URL中有一个名为
k1
的参数。当我没有连接查询时,我取了
k1
的值,它指向
AC
表中的右ID。然后,当使用左连接查询时,我查看了
k1
值,它指向CELLS表中的ID。如果我在列设置中指定了带有ID的
AC
表,它将如何找到正确的数据?可能是apex使用左连接查询的ID从AC表中查找数据,这显然是错误的。但我无法在数据列设置中指定左连接查询…基本上我的假设是正确的。我只是稍微修改了左连接:
选择CELLS.ID作为CELLID,CELLS.AC_ID作为ID
。。。解决了
500内部服务器错误
,我可以下载。