我必须在 Oracle Apex 应用程序中对穿梭机的输出进行排序。
我想出了这个简单的 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
关于arrays - 对 varchar2 数组进行排序 (apex_t_varchar2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65720366/