如何在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
相关产品推荐
相关产品推荐

