对 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