apex_application_temp_files 的问题
issue with apex_application_temp_files
我有一个问题,在我的 ORACLE APEX 应用程序中,我想要一个文件上传机制,将上传的 .zip 文件作为参数发送到某个函数(该函数运行良好,我通过从数据库手动输入对其进行了测试)。问题是,当我在进程中尝试 select 从 "apex_application_temp_files" 上传文件时,它会抛出异常 "NO DATA FOUND",但是当我将报告添加到我 select ID 和 FILENAMES 我的应用程序时看到那个文件...知道为什么会这样吗?
如果这是一个小问题,我很抱歉,但我是 APEX 开发的新手。
过程:
declare
l_blob blob;
begin
SELECT blob_content
INTO l_blob
FROM apex_application_temp_files
WHERE NAME = :P6_FILE;
--INSTANTLY SET :G_TEST_ID FOR REPORTS
:G_TEST_ID := file_management.unwrap_zip(ab_zipped_blob => l_blob);
end;
您需要 select 列 NAME
而不是 FILENAME
。前者是唯一标识符(看起来像 series_of_numbers\the_filename
),是文件浏览项将包含的内容,而后者则没有前缀。
你看,你必须提供更多信息。我创建了一个非常简单的页面来尝试这个 (apex.oracle.com)。
P2_FILE
是文件浏览项。
- 存储类型:Table APEX_APPLICATION_TEMP_FILES
- 清除文件时间:会话结束
我创建了一个提交过程,它只是在调试输出中列出一些内容。
declare
l_blob blob;
begin
for r in (select * from apex_application_temp_files)
loop
apex_debug.message('name: %s - filename: %s', r.name, r.filename);
end loop;
apex_debug.message('P2_FILE: %s', :P2_FILE);
SELECT blob_content
INTO l_blob
FROM apex_application_temp_files
WHERE name = :P2_FILE;
apex_debug.message('blob length: %s', dbms_lob.getlength(l_blob));
end;
所以我 运行 页面,启用调试,select 一个文件并点击提交。所有作品。检查调试日志(接受):
name: 39044609744029199463/README (2).md - filename: README (2).md
name: 39044529927808550681/README (1).md - filename: README (1).md
name: 39044569042020557797/README.md - filename: README.md
P2_FILE: 39044609744029199463/README (2).md
blob length: 1884
所以:你这边有什么不同?您是否按照 Jeffrey 和 运行 的建议完成了页面调试?您的 "purge" 设置为什么?您确定 no-data-found 发生在 blob 的 select 而不是您的过程中 - 您是否注释掉了您的过程调用?
我有一个问题,在我的 ORACLE APEX 应用程序中,我想要一个文件上传机制,将上传的 .zip 文件作为参数发送到某个函数(该函数运行良好,我通过从数据库手动输入对其进行了测试)。问题是,当我在进程中尝试 select 从 "apex_application_temp_files" 上传文件时,它会抛出异常 "NO DATA FOUND",但是当我将报告添加到我 select ID 和 FILENAMES 我的应用程序时看到那个文件...知道为什么会这样吗? 如果这是一个小问题,我很抱歉,但我是 APEX 开发的新手。
过程:
declare
l_blob blob;
begin
SELECT blob_content
INTO l_blob
FROM apex_application_temp_files
WHERE NAME = :P6_FILE;
--INSTANTLY SET :G_TEST_ID FOR REPORTS
:G_TEST_ID := file_management.unwrap_zip(ab_zipped_blob => l_blob);
end;
您需要 select 列 NAME
而不是 FILENAME
。前者是唯一标识符(看起来像 series_of_numbers\the_filename
),是文件浏览项将包含的内容,而后者则没有前缀。
你看,你必须提供更多信息。我创建了一个非常简单的页面来尝试这个 (apex.oracle.com)。
P2_FILE
是文件浏览项。
- 存储类型:Table APEX_APPLICATION_TEMP_FILES
- 清除文件时间:会话结束
我创建了一个提交过程,它只是在调试输出中列出一些内容。
declare
l_blob blob;
begin
for r in (select * from apex_application_temp_files)
loop
apex_debug.message('name: %s - filename: %s', r.name, r.filename);
end loop;
apex_debug.message('P2_FILE: %s', :P2_FILE);
SELECT blob_content
INTO l_blob
FROM apex_application_temp_files
WHERE name = :P2_FILE;
apex_debug.message('blob length: %s', dbms_lob.getlength(l_blob));
end;
所以我 运行 页面,启用调试,select 一个文件并点击提交。所有作品。检查调试日志(接受):
name: 39044609744029199463/README (2).md - filename: README (2).md
name: 39044529927808550681/README (1).md - filename: README (1).md
name: 39044569042020557797/README.md - filename: README.md
P2_FILE: 39044609744029199463/README (2).md
blob length: 1884
所以:你这边有什么不同?您是否按照 Jeffrey 和 运行 的建议完成了页面调试?您的 "purge" 设置为什么?您确定 no-data-found 发生在 blob 的 select 而不是您的过程中 - 您是否注释掉了您的过程调用?