Pl / SQL: Как отсортировать таблицу рекордов? - PullRequest
1 голос
/ 11 ноября 2009

Я новичок в 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:

Ответы [ 3 ]

4 голосов
/ 11 ноября 2009

Вот хорошая техника, если вы не хотите бросать свои собственные: http://technology.amis.nl/blog/1217/sorting-plsql-collections-the-quite-simple-way-part-two-have-the-sql-engine-do-the-heavy-lifting

3 голосов
/ 11 ноября 2009

Также, возможно, это не то, что вам действительно нужно. Как правило, вы можете извлечь выгоду из использования SQL в коде PL / SQL - в SQL вы можете просто ЗАКАЗАТЬ ПО вашим результатам. Какую проблему вы пытаетесь решить?

Информация о коллекциях PL / SQL доступна здесь: Справочник по языку PL / SQL

2 голосов
/ 11 ноября 2009

У вас есть смешанные типы и переменные. Попробуйте:

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;
/

(исправлено путем удаления всех неиспользуемых типов и переменных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...