使用 Oracle Apex apex_data_export.download,where 子句被忽略。输出显示 OUTPUT 列中每一行的内容。
代码在进程类型执行代码中运行,在区域之后执行。我需要使用在页面加载之前就有值的 :P0_SUB 的值。where 子句有误吗?进程如何访问 :P0_SUB 的值?我需要更改执行点吗?
代码
l_context := apex_exec.open_query_context(
p_location => apex_exec.c_location_local_db,
p_sql_query => 'select output from TFA_USER',
p_where_clause => 'SUB = ' ||:P0_SUB);
l_export := apex_data_export.export (
p_context => l_context,
p_format => apex_data_export.c_format_json,
p_file_name => 'test' );
apex_exec.close( l_context );
apex_data_export.download( p_export => l_export );
EXCEPTION
when others THEN
apex_exec.close( l_context );
raise;
APEX_JSON.free_output;
当我使用以下代码时:
l_context := apex_exec.open_query_context(
p_location => apex_exec.c_location_local_db,
p_sql_query => 'select OUTPUT from TFA_USER where SUB = ' || :P0_SUB);
我收到以下错误
ORA-00904: "TEST"."USER": invalid identifier
有什么方法可以只获取一行?
它在APEX_EXEC.OPEN_QUERY_CONTEXT的文档中,但有点“字里行间”。这些参数类似于具有数据源的 apex 页面区域中的参数,就像经典报告一样。如果源 > 类型为“表/视图”,则有一个属性“Where 子句”。另一方面,如果源 > 类型为“SQL 查询”,则没有“Where 子句”,因为 where 子句只是 sql 查询本身的一部分。文档指出:
蓝色部分为查询类型“TABLE”的参数,红色部分为查询类型“SQL 查询”的参数。当查询类型 = “SQL 查询”时,查询类型“TABLE”的参数将被忽略。这在参数 p_where_clause 的描述中有解释。
在您的代码中,
p_sql_query
使用了参数,因此查询类型是“SQL 查询”,这会导致p_where_clause
被忽略。就像在任何 apex 区域源中一样,绑定变量可以包含在 sql 查询中,并将在运行时由 apex 引擎解析。在 pl/sql 代码中的任何地方使用绑定变量的连接都不是好的做法。
以下是一个有效代码示例。此示例使用了一个
P75_ENAME
具有前标头计算的页面项。代码需要进行页面处理,即预渲染或提交后。