powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql оракл Не получается создать триггер..Выдает ошибку
33 сообщений из 33, показаны все 2 страниц
sql оракл Не получается создать триггер..Выдает ошибку
    #39365308
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
CREATE OR REPLACE TRIGGER TOV_IN_SPIS
    AFTER INSERT ON SMENA
   
    DECLARE
   RESULTAT DATE;
   CURSOR c1 IS SELECT KOD, KOLICHESTVO, SUBSTR(SROK_GODNOSTI,3,2) AS BUKVA, DATA_IZGOTOVLENIA AS DATA_D, CAST(SUBSTR(SROK_GODNOSTI,1,2) AS INT) AS CHISLO  FROM TOVAR1;
   
   BEGIN
 
   FOR i IN c1 LOOP
  
    IF(i.BUKVA = 'Г') THEN BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
       - NUMTOYMINTERVAL(i.CHISLO, 'year') INTO RESULTAT
    FROM dual;
    IF (RESULTAT<= SYSDATE) THEN BEGIN
    INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, i.KOD,i.KOLICHESTVO, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ');END;
    END IF;
  --  END;
    END;END IF;
    IF (i.BUKVA  = 'М') THEN BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
      - NUMTOYMINTERVAL(i.CHISLO, 'month') INTO RESULTAT
    FROM dual;
    IF (RESULTAT<= SYSDATE) THEN BEGIN
    INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, i.KOD,i.KOLICHESTVO, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ');END;
    END IF;
    END;
   ELSE BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
       - NUMTODSINTERVAL(i.CHISLO, 'day') INTO RESULTAT
    FROM dual;
    IF (RESULTAT<= SYSDATE) THEN BEGIN
    INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, i.KOD,i.KOLICHESTVO, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ'); END;
    END IF;
    END;END IF;  END LOOP; 
    
  END TOV_IN_SPIS;  



Ошибка:
ORA-25001: cannot create this trigger type on this type of view
25001. 00000 - "cannot create this trigger type on this type of view"
*Cause: INSTEAD OF triggers can be created on any view which is not an
Editioning View, while BEFORE and AFTER triggers may only be
created on Editioning Views.
*Action: Change the trigger type to INSTEAD OF or change the view on which
you are attempting to create a DML trigger.

что это значит?
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365316
Где содержат таких "программистов"?
Это не праздное любопытство, хотелось бы избежать знакомства с их услугами.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365317
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705что это значит?
А какое слово тебе непонятно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365321
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,


Скорее всего SMENA это не таблица а представление (view). Для представления используются INSTEAD OF DML Triggers . INSTEAD OF триггер строчный (row level "for each row") по-определению а твой нет. Для начала привeди тип обьекта SMENA (table/view и editionalble/non-editionable если view).

SY.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365377
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYДля представления используются…Граната… Обезьяна…
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365411
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В недоумении.Где содержат таких "программистов"?
Это не праздное любопытство, хотелось бы избежать знакомства с их услугами.

а я в недоумении, где содержаться такие надменные специалисты (ну чтобы тоже не иметь с ним дел....)

знания - нарабатываются, а ваш характер- это навсегда, и наверняка, работать с вами неприятно.

так вот - человек знания приобретет и с другими общий язык еще найдет. И вас перегонит )
а вы так и будете гундеть и кичиться )
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365412
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
содержатся '
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365436
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что это значит?
Это значит, что надо прочитать concepts и sql reference.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365501
Индуктор.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ozornitcaзнания - нарабатываютсяНарабатывается опыт. Способность к интеллектуальному созиданию (в частности к программированию) опятом не ограничивается, требуется толика индуктивного мышления.
Не сделать из двух вариантов причины ошибки вывод - тут даже дедуктивного мышления не просматривается. Нагромождение приведенного кода тоже следствие исключительно "опыта". Научилось IF писать, давай клепать где ни попадя, DUAL - также.
Да и вопрос был не про тебя, а работодателя.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365528
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, Спасибо
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365576
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE OR REPLACE TRIGGER TOV_IN_SPIS
    AFTER INSERT ON SMENA1
    DECLARE
   RESULTAT DATE;
   CURSOR c1 IS SELECT KOD, KOLICHESTVO, SUBSTR(SROK_GODNOSTI,3,2) AS BUKVA, DATA_IZGOTOVLENIA AS DATA_D, CAST(SUBSTR(SROK_GODNOSTI,1,2) AS INT) AS CHISLO  FROM TOVAR1;
    BEGIN
    FOR i IN c1 LOOP
    IF(i.BUKVA = 'Г') THEN BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
       + NUMTOYMINTERVAL(i.CHISLO, 'year') INTO RESULTAT
    FROM dual;
    
    END;
    ELSE BEGIN
    IF (i.BUKVA  = 'М') THEN BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
      + NUMTOYMINTERVAL(i.CHISLO, 'month') INTO RESULTAT
    FROM dual;
    
    END;
   ELSE BEGIN
    SELECT to_date(i.DATA_D, 'dd.mm.yyyy') 
       + NUMTODSINTERVAL(i.CHISLO, 'day') INTO RESULTAT
    FROM dual;
    
    END;
    
    END IF;  
    END;
    END IF;
    IF (RESULTAT<= SYSDATE) THEN BEGIN
    INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, i.KOD,i.KOLICHESTVO, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ'); END;
    END IF;
    END LOOP; 
    
  END TOV_IN_SPIS; 



Прошу без остроумия, мне курсовой проект сдавать надо, поэтому все в темпе вальса.
Триггер отрабатывает, но в любом случае выполняет добавление строки в табл списание, а мне надо только в том, если результат меньше текущей даты..
Понимаю что то-то наворотила с условием, потому что такой вариант срабатывает:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
DAA DATE;
BEGIN
SELECT to_date('10.12.16', 'dd.mm.yyyy') 
     --  + NUMTOYMINTERVAL(5, 'year') 
     --  + NUMTOYMINTERVAL(3, 'month') 
       + NUMTODSINTERVAL(2, 'day') INTO DAA
FROM dual;
IF (DAA <= SYSDATE)
THEN BEGIN 
INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, 1141,11, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ');
   
END;
END IF;
END;



но что не пойму..
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365578
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,

Код: plsql
1.
2.
3.
4.
5.
SELECT to_date('10.12.16', 'dd.mm.yyyy') 
     --  + NUMTOYMINTERVAL(5, 'year') 
     --  + NUMTOYMINTERVAL(3, 'month') 
       + NUMTODSINTERVAL(2, 'day') --INTO DAA
FROM dual;


что вам выдает? знаете ли про наличие пакета dbms_output и как им пользоваться?
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365684
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790, этот вариант работает, при выполнении условия добавляется строка в табл СПИСАНИЕ
Не работает вариант, что выше с триггером, он добавляет строку в любом случае, а мне надо только если результат меньше текущей даты
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365739
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй изменить тело триггера на такое:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare
cursor c1 is select KOD, KOLICHESTVO, decode(substr(SROK_GODNOSTI,3,1),'Г', add_months(DATA_IZGOTOVLENIA, 12*substr(SROK_GODNOSTI,1,2), 'М', add_months(DATA_IZGOTOVLENIA, substr(SROK_GODNOSTI,1,2), DATA_IZGOTOVLENIA + substr(SROK_GODNOSTI,1,2)) AS CHISLO from TOVAR1;
begin
   for i in c1 loop
       if  i.CHISLO <= trunc(sysdate) then
              INSERT INTO SPISANIE1(KOD_SPISANIE,KOD_TOVAR ,KOLICHESTVO,DATA_S ,PRIMECH) VALUES (ID_SPISANIE.NextVal, i.KOD,i.KOLICHESTVO, SYSDATE, 'ИСТЕК СРОК ГОДНОСТИ');   
       end if;
   end loop;
end;



если дата изготовления все-таки хранится как строка, то оберни вхождения DATA_IZGOTOVLENIA в to_date(DATA_IZGOTOVLENIA,'DD.MM.RRRR')
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365787
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirYouGin, Спасибо, про decode не знала..
Только у меня в любом случае отнимает почему-то только день, то есть срабатывает по сути что не одно из условий не выполняется
Выполняю проверку:

Код: plsql
1.
SELECT SUBSTR(SROK_GODNOSTI,3,2) FROM TOVAR1;



Результат рис.1

SELECT CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT) FROM TOVAR1;

Результат рис.2

Код: plsql
1.
select KOD, KOLICHESTVO, decode(SUBSTR(SROK_GODNOSTI,3,2),'Г',( add_months(DATA_IZGOTOVLENIA, 12*CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), 'М', (add_months(DATA_IZGOTOVLENIA, CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), (DATA_IZGOTOVLENIA + CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))) AS CHISLO from TOVAR1;



Результат рис.3

Дата изготовления и срок из табл ТОВАР рис.4
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365796
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
decode(SUBSTR(SROK_GODNOSTI,3,2)


поменяй на
Код: plsql
1.
decode(SUBSTR(SROK_GODNOSTI,3,[color=red]1[/color])


как у меня было написано.

третий параметр substr - это количество символов.. тебе нужно брать один символ, а не два.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365797
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,
для начала
Код: plsql
1.
SUBSTR(SROK_GODNOSTI,3,2),'Г'
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365805
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705Прошу без остроумия, мне курсовой проект сдавать надо, поэтому все в темпе вальса.
Друзья, бросаем все дела и помогаем Ане.
Ну а потом, все, кто помог - идем с ней на свиданье.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365807
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadто помог - идем с ней на свиданье
в начале фото ТС с товаром, у которого не закончился срок годности
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365809
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по скриншоту, срок хранится как строка... Но тут возникает вопрос: 1 ГОД - OK, 2 - ГОДА - OK, 5 ЛЕТ - FAILED....
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365813
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirYouGin,

Код: plsql
1.
select KOD, KOLICHESTVO, decode(SUBSTR(SROK_GODNOSTI,3,1),'Г',( add_months(DATA_IZGOTOVLENIA, 12*CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), 'М', (add_months(DATA_IZGOTOVLENIA, CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), (DATA_IZGOTOVLENIA + CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))) AS CHISLO from TOVAR1;



поменяла, я так первоначально и запускала, но все также
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365819
Аня1705,

попробуйте KOD заменить на CODE. Отпишитесь пожалуйста, заработало или нет.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365820
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,

учимся считать до 4х
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365823
NETClient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadАня1705Прошу без остроумия, мне курсовой проект сдавать надо, поэтому все в темпе вальса.
Друзья, бросаем все дела и помогаем Ане.
Ну а потом, все, кто помог - идем с ней на свиданье.
Аня1705, приходи .
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365828
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
select SUBSTR(SROK_GODNOSTI,3,1) BUKVA, KOD, KOLICHESTVO, decode(SUBSTR(SROK_GODNOSTI,3,1),'Г',( add_months(DATA_IZGOTOVLENIA, 12*CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), 'М', (add_months(DATA_IZGOTOVLENIA, CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))), (DATA_IZGOTOVLENIA + CAST(SUBSTR(SROK_GODNOSTI,1,3) AS INT))) AS CHISLO from TOVAR1;



1. Убедись, что буква 'М' обозначающая месяцы в запросе у тебя русская, а не английская..
2. Включи в выборку строки, где срок годности в годах.
3. Посмотри, что выводится в первой колонке BUKVA вышеприведенного запроса.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365830
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadАня1705Прошу без остроумия, мне курсовой проект сдавать надо, поэтому все в темпе вальса.
Друзья, бросаем все дела и помогаем Ане.
Ну а потом, все, кто помог - идем с ней на свиданье.

Код: plsql
1.
2.
3.
TO_DATE('10.12.16','DD.MM.YYYY')+NUMTOYMINTERVAL(5,'YEAR')--+NUMTOYMINTERVAL(3,'
--------------------------------------------------------------------------------
10.12.0021 00:00:00



Медитируем дальше. Аня, жги!
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365859
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirYouGin, проверила, буква русская
добавила год, все равно из дней отнимает
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365865
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажи вывод запроса с колонкой BUKVA, где есть записи со сроком годности ГОД
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365868
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,

все равно из дней отнимает

Пример в студию. Запрос + результат.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365874
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirYouGin,
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365876
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аня1705,

Код: plsql
1.
length(' Г')=2
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365882
SirYouGin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замени:

Код: plsql
1.
decode(substr(SROK_GODNOSTI,3,1),'Г', 



на

Код: plsql
1.
decode(substr(SROK_GODNOSTI,4,1),'Г', 



Тебе 4 символ надо брать, а не третий.
...
Рейтинг: 0 / 0
sql оракл Не получается создать триггер..Выдает ошибку
    #39365897
Аня1705
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirYouGin, спасибо большое)
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql оракл Не получается создать триггер..Выдает ошибку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]