我创建了一个如下所示的变量来容纳多个 varchar 值。
DECLARE
TYPE t_refField10 IS TABLE OF VARCHAR2 (25);
v_refField10 t_refField10;
BEGIN
SELECT REF_FIELD_10 BULK COLLECT INTO v_refField10 FROM LPN WHERE
TC_ASN_ID = v_asnId;
END;
想要的 ref_field_10 值的最大值。 但问题是: ref_field_10 值是 varchar 类型,它们是这样的。
它们采用 YYYYMMDD-HRS 格式。
此处 20220409-16 表示 2022 年 4 月 9 日下午 4 点。 20220411-09 表示 2022 年 4 月 11 日上午 9 点。
我需要找到 ref_field_10 的最大值(ref_field_10 具有最新的日期时间)。
有人可以帮我吗?
我不知道如何实现这一目标。
很多选择。您的字符串格式日期已经按照与实际日期相同的字母顺序排列,因此简单的
MAX
或 ORDER BY
或 GREATEST
开箱即用即可正常工作。要获得价值,您可以:
将集合定义为 SQL 类型,然后直接使用 SQL 查询填充的集合(列名称字面意思是“
COLUMN_VALUE
”):
create TYPE t_refField10 IS TABLE OF VARCHAR2 (25);
DECLARE
v_refField10 t_refField10;
var_maxvalue varchar2(25);
BEGIN
SELECT REF_FIELD_10 BULK COLLECT INTO v_refField10 FROM LPN WHERE
TC_ASN_ID = v_asnId;
SELECT MAX(column_value)
INTO var_maxvalue
FROM TABLE(v_refField10);
dbms_output.put_line(var_maxvalue);
END;
从您的集合总体中进行单独的查询以获得最大值
DECLARE
TYPE t_refField10 IS TABLE OF VARCHAR2 (25);
v_refField10 t_refField10;
var_maxvalue varchar2(25);
BEGIN
SELECT REF_FIELD_10 BULK COLLECT INTO v_refField10 FROM LPN WHERE
TC_ASN_ID = v_asnId;
SELECT MAX(REF_FIELD_10) INTO var_maxvalue FROM LPN WHERE
TC_ASN_ID = v_asnId;
dbms_output.put_line(var_maxvalue);
END;
向集合中添加一个降序
ORDER BY
子句,然后获取第一个数组索引:
DECLARE
TYPE t_refField10 IS TABLE OF VARCHAR2 (25);
v_refField10 t_refField10;
var_maxvalue varchar2(25);
BEGIN
SELECT REF_FIELD_10 BULK COLLECT INTO v_refField10 FROM LPN WHERE
TC_ASN_ID = v_asnId ORDER BY REF_FIELD_10 DESC;
var_maxvalue := v_refField10(1); -- or v_refField10(v_refField10.FIRST)
dbms_output.put_line(var_maxvalue);
END;
在 PL/SQL 中循环遍历集合:
DECLARE
TYPE t_refField10 IS TABLE OF VARCHAR2 (25);
v_refField10 t_refField10;
var_maxvalue varchar2(25) := ' ';
BEGIN
SELECT REF_FIELD_10 BULK COLLECT INTO v_refField10 FROM LPN WHERE
TC_ASN_ID = v_asnId;
FOR i IN v_refField10.FIRST .. v_refField10.LAST
LOOP
var_maxvalue := GREATEST(v_refField10(i),var_maxvalue);
END LOOP;
dbms_output.put_line(var_maxvalue);
END;