Oracle Forms — ошибка 103, обнаружен символ END

Я использую Oracle Forms Builder 11.
Мой код:

declare 
    type myType is varray(3000) of my_table%rowtype;
    myAsset myType:=myType();
    i number;
    n number;
    exNoInvNum exception;   
begin   
    go_block('my_block');
    first_record;
    i:=1;
    loop
        myAsset.extend();
        myAsset(i).hqId:=:my_block.hqId;
        myAsset(i).deptId:=:my_block.deptId;
        myAsset(i).invNum:=:my_block.invNum;        
        exit when :system.last_record='TRUE';
        i:=i+1;
        next_record;
    end loop;
    go_block('my_block');
    first_record;
    loop        
        if (:my_block.linkedInvNum is not null) then
            n:=0;
            select count(*) into n
                from my_table s
                where s.invNum=:my_block.linkedInvNum
                and s.hqId=:my_block.hqId
                and (s.deptId=:my_block.deptId
                or (s.deptId is null and :my_block.deptId is null));
            if (n=0) then
                for i in myAsset.first .. myAsset.last loop
                    if (myAsset(i).invNum=:my_block.linkedInvNum
                    and myAsset(i).hqId=:my_block.hqId
                    and (myAsset(i).deptId=:my_block.deptId
                    or (myAsset(i).deptId is null and :my_block.deptId is null))) then
                        n:=1;
                    end if;
                end loop;
            end if; 
            if (n=0) then
                raise exNoInvNum;
            else
                commit_form;    
                go_block('my_table');
                clear_block(no_validate);               set_item_property('my_block.generate_excel',ENABLED,property_true);             set_item_property('my_block.process_data',ENABLED,property_false);
            end if;
        end if;
        exit when :system.last_record='TRUE';   
        next_record;
    end loop;
    exception
        when exNoInvNum then
            message('No existing inventory number!');
        when others then
            null;
    end;
end;

Я получаю сообщение Ошибка 103, строка объявления 2, столбец 1: Обнаружен символ "КОНЕЦ".

Я проверил свой код на наличие опечаток, отсутствующих точек с запятой и подобных вещей, но похоже, что все в порядке.

Любые идеи?


person vtomic85    schedule 17.06.2015    source источник


Ответы (1)


Я получаю сообщение об ошибке 103, строка объявления 2, столбец 1: Обнаружен символ "КОНЕЦ"

Что ж, у вас есть дополнительное ключевое слово END в вашем блоке PL/SQL.

    end;
end;

Синтаксис анонимного блока PL/SQL:

DECLARE
   ...
BEGIN
   ...
EXCEPTION
   ...
END;

И это:

when others then
   null;

сама по себе ошибка в вашем коде.

Когда другие почти всегда являются ОШИБКОЙ, если только за ней сразу не следует ПОВЫШЕНИЕ. Помните, для ошибок, RAISE –> CATCH –> HANDLE. зачем нам нужен обработчик исключений? Чтобы отловить ошибки, зарегистрируйте их (необязательно) и, наконец, сделайте что-нибудь с ними.

Прочтите КОГДА ДРУГИЕ ТОГДА NULL — ошибка

person Lalit Kumar B    schedule 17.06.2015
comment
Спасибо, я пропустил этот дополнительный конец. - person vtomic85; 17.06.2015
comment
А что касается того, когда другие тогда равны нулю... Мне нечего сказать в свою защиту, кроме того, что здесь всегда так делалось :) - person vtomic85; 17.06.2015
comment
@vtomic85 Спасибо за отзыв. Что касается КОГДА ДРУГИЕ, это плохая практика кодирования. Это была бы хорошая возможность для вас предложить лучший код. Удачи! - person Lalit Kumar B; 17.06.2015