You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PL/SQL中使用数组对姓名按字母顺序排序

PL/SQL 字符串数组按字母排序实现方案

你可以直接在原有代码的--PROSES PENGURUTAN注释后补充冒泡排序逻辑即可完成需求,完整可运行代码如下:

-- MENGURUTKAN NAMA 
DECLARE
    TYPE SISWA IS
        TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER;
    NAMA SISWA;
    I INTEGER;
    -- 排序用临时变量
    V_TEMP VARCHAR2(25);
    V_ARRAY_LENGTH INTEGER;
BEGIN
    NAMA(1) := 'Arista Destriana';
    NAMA(2) := 'Yandri Gunawan';
    NAMA(3) := 'Herry Wahyudinata';
    NAMA(4) := 'Budi Raharja';
    
    DBMS_OUTPUT.PUT_LINE('SEBELUM DIURUTKAN : ');
    FOR I IN 1..4 LOOP
        DBMS_OUTPUT.PUT_LINE(NAMA(I));
    END LOOP;
    --PROSES PENGURUTAN
    V_ARRAY_LENGTH := NAMA.COUNT;
    -- 冒泡排序实现
    FOR I IN 1..V_ARRAY_LENGTH LOOP
        FOR J IN 1..V_ARRAY_LENGTH - I LOOP
            -- 字符串直接比较即可按字母序判断大小
            IF NAMA(J) > NAMA(J+1) THEN
                V_TEMP := NAMA(J);
                NAMA(J) := NAMA(J+1);
                NAMA(J+1) := V_TEMP;
            END IF;
        END LOOP;
    END LOOP;

    -- 输出排序后结果
    DBMS_OUTPUT.PUT_LINE(CHR(10) || 'SETELAH DIURUTKAN : ');
    FOR I IN 1..V_ARRAY_LENGTH LOOP
        DBMS_OUTPUT.PUT_LINE(NAMA(I));
    END LOOP;
END;
/

运行后输出结果如下:

SEBELUM DIURUTKAN : 
Arista Destriana
Yandri Gunawan
Herry Wahyudinata
Budi Raharja

SETELAH DIURUTKAN : 
Arista Destriana
Budi Raharja
Herry Wahyudinata
Yandri Gunawan

关键逻辑说明

  • Oracle中VARCHAR2类型的字符串直接使用比较运算符判断大小,默认会按照当前会话的NLS_SORT配置按自然字母序排序,不需要额外转换
  • 冒泡排序的实现逻辑适合初学者理解数组排序的底层逻辑,兼容性不受Oracle版本限制
    如果想要更简洁的实现,也可以将关联数组转为嵌套表后使用SQL的ORDER BY能力完成排序,不需要手动写排序算法。

内容的提问来源于stack exchange,提问作者sound_of_coups

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:54:07