Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ошибка триггера  [new]
SeamusPKC
Member

Откуда:
Сообщений: 7
Не могу создать триггер выдает ошибку:
Compilation failed, line 11 (12:20:26) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers.
PLS-00225: subprogram or cursor 'V' reference is out of scopeCompilation failed, line 11 (12:20:26) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers.
PL/SQL: Statement ignored
Хотя в процедурах и функциях все срабатывает
create or replace TRIGGER trig_premiya_personal
BEFORE INSERT ON offers FOR EACH ROW
DECLARE
    schet number;
    CURSOR cur2 is select * from mmprod;
    v_id cur2%ROWTYPE;
BEGIN
    open cur2;
    select count(*) into schet from mmprod;
    IF INSERTING THEN 
    for i in 1..schet loop
        FETCH cur2 INTO v_id;
        if 3000<=v_id.summaoffer or 20<=v.id.kol then INSERT INTO nachisleniya VALUES (v_id.sellid, 100);
        commit;
        END IF;
    end loop;
    END IF;
    CLOSE cur2;
END;
17 июн 20, 15:21    [22152440]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
SeamusPKC
PLS-00225: subprogram or cursor 'V' reference is out of scopeCompilation failed, line 11
...
...
        if 3000<=v_id.summaoffer or 20<=v.id.kol then INSERT INTO nachisleniya VALUES (v_id.sellid, 100);
...
17 июн 20, 16:15    [22152494]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
SeamusPKC,

коммит в триггере так задумано?

....
stax
17 июн 20, 16:25    [22152504]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
SeamusPKC
Member

Откуда:
Сообщений: 7
andrey_anonymous,

изменил, теперь вот так, ошибка осталась
create or replace TRIGGER trig_premiya_personal
BEFORE INSERT ON offers FOR EACH ROW
DECLARE
    schet number;
    CURSOR cur2 is select * from mmprod;
    v_id cur2%ROWTYPE;
BEGIN
    open cur2;
    select count(*) into schet from mmprod;
    IF INSERTING THEN 
    for i in 1..schet loop
        FETCH cur2 INTO v_id;
        if 3000<=v_id.summaoffer or 20<=v_id.kol then INSERT INTO nachisleniya VALUES (v_id.sellid, 100);
        END IF;
    end loop;
    END IF;
    CLOSE cur2;
END;


вот ошибка
Compilation failed, line 11 (14:17:31) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers.
PL/SQL: ORA-00947: not enough valuesCompilation failed, line 11 (14:17:31) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers.
PL/SQL: SQL Statement ignored
17 июн 20, 17:21    [22152555]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1495
SeamusPKC
ORA-00947: not enough values


Вы каждую ошибку будете с нами обсуждать?
17 июн 20, 17:42    [22152576]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
SeamusPKC,

перечислете поля в INSERT INTO nachisleniya(х1,х2)

ps
for i in 1..schet loop странноватый цикл

.....
stax
17 июн 20, 17:51    [22152583]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
SeamusPKC
Member

Откуда:
Сообщений: 7
Stax, там значения ид и фиксированная ставка пример:
values(1,100) что должно предавать.

Сейчас понял.что если строк нету, то и цикл не сработает, но записи есть и по сути должно работать
17 июн 20, 17:59    [22152594]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6860
SeamusPKC
и по сути должно работать

не должно это работать....
18 июн 20, 05:49    [22152762]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2468
SeamusPKC
Stax, там значения ид и фиксированная ставка пример:
values(1,100) что должно предавать.

Сейчас понял.что если строк нету, то и цикл не сработает, но записи есть и по сути должно работать


SQL> insert into t values(1,1);
insert into t values(1,1)
*
ERROR at line 1:
ORA-00947: not enough values

покажите структуру nachisleniya
desc nachisleniya

надо перечислять поля в инсерт

INSERT INTO nachisleniya(pole1,pole2) VALUES (v_id.sellid, 100);

ps
о цикле

select count(*) into schet from mmprod;
IF INSERTING THEN

в етот момент к-во поменяется (добавят/удалят строки)

for i in 1..schet loop

часто из цикла выходят по not found
.....
stax
18 июн 20, 08:28    [22152779]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка триггера  [new]
SeamusPKC
Member

Откуда:
Сообщений: 7
Stax, спасибо тебе, разобрался, все работает
18 июн 20, 11:26    [22152841]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить