对 varchar2 数组进行排序 (apex_t_varchar2)
Sort a varchar2 array (apex_t_varchar2)
我必须在 Oracle Apex 应用程序中对 shuttle 的输出进行排序。
我想到了这个 pl/sql 的简单片段来做到这一点,但我想知道是否有更好的方式来实现它。或者至少,不必声明两个变量来获得相同的结果。
我的PL/SQL:
DECLARE
t apex_t_varchar2;
t_tmp apex_t_varchar2;
BEGIN
/* shuttle output is d:b:a:c*/
t := apex_string.split(:MY_SHUTTLE, ':');
FOR i IN (SELECT column_value FROM TABLE ( t ) ORDER BY 1) LOOP
apex_string.push(t_tmp, i.column_value);
END LOOP;
t := t_tmp;
dbms_output.put_line(apex_string.join(t, ':'));
END;
输出(正确)是:
a:b:c:d
也许有一种方法可以将 SQL 语句 (select ... from table(t)
) 直接转换为 apex_t_varchar2
数组,但我无法做到。
可以在对数组进行排序的同时,将SELECT放入apex_t_varchar2数组中。下面的代码是如何执行此操作的示例。
DECLARE
l_my_shuttle VARCHAR2 (2000) := 'd:b:a:c';
t_vals apex_t_varchar2;
BEGIN
DBMS_OUTPUT.put_line (l_my_shuttle);
SELECT *
BULK COLLECT INTO t_vals
FROM TABLE (apex_string.split (l_my_shuttle, ':'))
ORDER BY 1;
DBMS_OUTPUT.put_line (apex_string.JOIN (t_vals, ':'));
END;
/
输出
d:b:a:c
a:b:c:d
我必须在 Oracle Apex 应用程序中对 shuttle 的输出进行排序。
我想到了这个 pl/sql 的简单片段来做到这一点,但我想知道是否有更好的方式来实现它。或者至少,不必声明两个变量来获得相同的结果。
我的PL/SQL:
DECLARE
t apex_t_varchar2;
t_tmp apex_t_varchar2;
BEGIN
/* shuttle output is d:b:a:c*/
t := apex_string.split(:MY_SHUTTLE, ':');
FOR i IN (SELECT column_value FROM TABLE ( t ) ORDER BY 1) LOOP
apex_string.push(t_tmp, i.column_value);
END LOOP;
t := t_tmp;
dbms_output.put_line(apex_string.join(t, ':'));
END;
输出(正确)是:
a:b:c:d
也许有一种方法可以将 SQL 语句 (select ... from table(t)
) 直接转换为 apex_t_varchar2
数组,但我无法做到。
可以在对数组进行排序的同时,将SELECT放入apex_t_varchar2数组中。下面的代码是如何执行此操作的示例。
DECLARE
l_my_shuttle VARCHAR2 (2000) := 'd:b:a:c';
t_vals apex_t_varchar2;
BEGIN
DBMS_OUTPUT.put_line (l_my_shuttle);
SELECT *
BULK COLLECT INTO t_vals
FROM TABLE (apex_string.split (l_my_shuttle, ':'))
ORDER BY 1;
DBMS_OUTPUT.put_line (apex_string.JOIN (t_vals, ':'));
END;
/
输出
d:b:a:c
a:b:c:d