【发布时间】:2019-02-12 20:36:44
【问题描述】:
我目前正在为区域开发一个 APEX 插件。它执行一些 JavaScript 代码,并将 SELECT 结果转换为字符串。但出于测试原因,SELECT 查询暂时写入插件的源 PL/SQL 代码。
源代码如下所示:
FUNCTION f_render (p_region in apex_plugin.t_region, p_plugin in apex_plugin.t_plugin)
RETURN apex_plugin.t_region_render_result IS
v_js VARCHAR(512);
v_data VARCHAR(1024);
BEGIN
SELECT '[' || c_matrix || ']' INTO v_data FROM (
SELECT listagg(c_row, ',') WITHIN GROUP (ORDER BY c_row) AS c_matrix FROM (
-- next line should be re-written
-- for compatibility with any possible origin or target string
-- values and numbers, but it's another question
SELECT '[' || "'a'" || ',' || "'b'" || ']' AS c_row FROM (
-- actual test table query that should be in p_region.source
WITH t0 AS (
SELECT 'a' origin, 'a' target, 11 amount FROM dual UNION ALL
SELECT 'a', 'b', 21 FROM dual UNION ALL
SELECT 'b', 'a', 12 FROM dual UNION ALL
SELECT 'b', 'b', 22 FROM dual
), t1 AS (
SELECT * FROM t0
PIVOT ( sum(amount) for target in ('a','b'))
ORDER BY origin
)
SELECT * FROM t1
)
)
);
v_js := q'[
console.log("@DATASTRING@");
]';
v_js := REPLACE(v_js, '@DATASTRING@', v_data);
apex_javascript.add_onload_code(p_code => v_js, p_key => null);
RETURN NULL;
END f_render;
“实际测试表”SELECT 返回此t1 表:
|ORIGIN|'a'|'b'|
|------|---|---|
| a | 11| 21|
| b | 12| 22|
console.log 打印这样的字符串:[[11,21],[12,22]]。而且,如果我调整一些东西,这个插件甚至会在浏览器控制台中返回这个 JS 数组作为......一个 JS 数组,因为它应该。
目前这些是必需且正确的结果。 但是如果我将“实际测试表”SELECT 更改为p_region.source 并将此SELECT 放入Source: SQL Query 放入Page Designer,它根本不起作用,而APEX由于某些错误,不想保存此插件。
p_region.source 应该能够使用任何SELECT,甚至像SELECT * FROM table_A 这样简单的东西,其中table_A 是类似于“实际测试表”t1 的旋转矩阵。
问题:如何正确引用p_region.source 中的查询结果以使其正常工作? AFAIK,它可以用APEX_PLUGIN_UTIL.GET_DATA 或.GET_DATA2 完成。但我不知道它返回什么以及如何以及在哪里测试它。我想在 dbfiddle 之类的东西中使用它来了解它的作用。
PS:我是一名前端初级,但是我的老板不管我的资格如何都给了我这个任务。在这种情况下,Oracle 文档也不是很有帮助。
【问题讨论】:
标签: plsql oracle-apex oracle-apex-5.1