В настоящее время я разрабатываю плагин 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 Documentation не очень помогает в этой ситуации.