2009-11-11 36 views
1

我是pl/sql新手! 我想使用簡單的氣泡排序算法對記錄表進行排序。問題是什麼?Pl/SQL:如何對記錄表進行排序?

我在哪裏可以找到關於使用記錄表的更多信息?

DECLARE 
    text VARCHAR2(50); 
TYPE TIP_VECTOR 
IS 
    TABLE OF INT INDEX BY BINARY_INTEGER; 
TYPE contorRecord 
IS 
    record 
    (
     codASCII VARCHAR2(3), 
     contor SMALLINT); 
TYpe tip_vector2 
IS 
    TABLE OF contorRecord; 
    VECTOR TIP_VECTOR; 
    VECTOR2 TIP_VECTOR2 := TIP_VECTOR2(); 
    aux tip_vector2 := tip_vector2(); 
    v_char VARCHAR2(3); 
    FLAG BOOLEAN := TRUE; 
    t smallint; 
    n  SMALLINT := 1; 
    ind SMALLINT := 0; 

begin 
     AUX.EXTEND(1); 
      WHILE(FLAG) 
        LOOP 
        FLAG := FALSE; 
    -- here is the problem; what i'm doing wrong? 
        FOR I IN 1..(vector2.count-1) LOOP 
    -- here is the problem; what i'm doing wrong? 
        IF VECTOR2(I).CONTOR < VECTOR2(I+1).contor THEN 
        AUX   := VECTOR(I+1); 
        VECTOR(i+1) := VECTOR(I); 
        VECTOR(I) := AUX; 
        FLAG  := TRUE; 
        END IF; 
        END LOOP; 
        END LOOP; 
end; 

錯誤:

Error report: 

PLS-00382: expression is of wrong type 

PL/SQL: Statement ignored 

PLS-00382: expression is of wrong type 

PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

回答

2

你有你的類型和變量混淆。嘗試:

DECLARE 
    TYPE contorRecord IS record (codASCII VARCHAR2(3), contor SMALLINT); 
    TYpe tip_vector2 IS TABLE OF contorRecord; 
    VECTOR2 TIP_VECTOR2 := TIP_VECTOR2(); 
    aux contorRecord; 
    FLAG BOOLEAN := TRUE; 
begin 
    WHILE(FLAG) 
    LOOP 
     FLAG := FALSE; 
     FOR I IN 1..(vector2.count-1) LOOP 
      IF VECTOR2(I).CONTOR < VECTOR2(I+1).contor THEN 
       AUX   := VECTOR2(I+1); 
       VECTOR2(i+1) := VECTOR2(I); 
       VECTOR2(I) := AUX; 
       FLAG  := TRUE; 
      END IF; 
     END LOOP; 
    END LOOP; 
end; 
/

3

(刪除所有未使用的類型和變量整理了)而且它也許不是你真正需要的方式。通常,您可以從PL/SQL代碼中使用SQL獲益 - 在SQL中,您只需對結果進行ORDER BY即可。你想解決什麼問題?

在PL/SQL集合的信息,請訪問:PL/SQL Language Reference

+0

排序僅用於簡單的情形。如果我想在內部使用具有複雜邏輯的自定義比較器,我該怎麼辦? 在所有現代語言中,這是一項簡單的任務。 – Jack 2017-11-29 15:13:33

相關問題