Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql оракл Не получается создать триггер..Выдает ошибку / 25 сообщений из 33, страница 1 из 2
12.12.2016, 23:24
    #39365308
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Код: 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
12.12.2016, 23:36
    #39365316
sql оракл Не получается создать триггер..Выдает ошибку
Где содержат таких "программистов"?
Это не праздное любопытство, хотелось бы избежать знакомства с их услугами.
...
Рейтинг: 0 / 0
12.12.2016, 23:38
    #39365317
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Аня1705что это значит?
А какое слово тебе непонятно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.12.2016, 23:54
    #39365321
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Аня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
13.12.2016, 07:33
    #39365377
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
SYДля представления используются…Граната… Обезьяна…
...
Рейтинг: 0 / 0
13.12.2016, 09:05
    #39365411
Ozornitca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
В недоумении.Где содержат таких "программистов"?
Это не праздное любопытство, хотелось бы избежать знакомства с их услугами.

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

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

так вот - человек знания приобретет и с другими общий язык еще найдет. И вас перегонит )
а вы так и будете гундеть и кичиться )
...
Рейтинг: 0 / 0
13.12.2016, 09:05
    #39365412
Ozornitca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
содержатся '
...
Рейтинг: 0 / 0
13.12.2016, 09:21
    #39365436
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
что это значит?
Это значит, что надо прочитать concepts и sql reference.
...
Рейтинг: 0 / 0
13.12.2016, 10:18
    #39365501
Индуктор.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Ozornitcaзнания - нарабатываютсяНарабатывается опыт. Способность к интеллектуальному созиданию (в частности к программированию) опятом не ограничивается, требуется толика индуктивного мышления.
Не сделать из двух вариантов причины ошибки вывод - тут даже дедуктивного мышления не просматривается. Нагромождение приведенного кода тоже следствие исключительно "опыта". Научилось IF писать, давай клепать где ни попадя, DUAL - также.
Да и вопрос был не про тебя, а работодателя.
...
Рейтинг: 0 / 0
13.12.2016, 10:53
    #39365528
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
SY, Спасибо
...
Рейтинг: 0 / 0
13.12.2016, 11:48
    #39365576
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Код: 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
13.12.2016, 11:52
    #39365578
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Аня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
13.12.2016, 13:50
    #39365684
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
K790, этот вариант работает, при выполнении условия добавляется строка в табл СПИСАНИЕ
Не работает вариант, что выше с триггером, он добавляет строку в любом случае, а мне надо только если результат меньше текущей даты
...
Рейтинг: 0 / 0
13.12.2016, 14:22
    #39365739
SirYouGin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
попробуй изменить тело триггера на такое:
Код: 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
13.12.2016, 15:04
    #39365787
Аня1705
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
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
13.12.2016, 15:13
    #39365796
SirYouGin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Код: plsql
1.
decode(SUBSTR(SROK_GODNOSTI,3,2)


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


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

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

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

учимся считать до 4х
...
Рейтинг: 0 / 0
13.12.2016, 15:30
    #39365823
NETClient
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
AmKadАня1705Прошу без остроумия, мне курсовой проект сдавать надо, поэтому все в темпе вальса.
Друзья, бросаем все дела и помогаем Ане.
Ну а потом, все, кто помог - идем с ней на свиданье.
Аня1705, приходи .
...
Рейтинг: 0 / 0
13.12.2016, 15:33
    #39365828
SirYouGin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql оракл Не получается создать триггер..Выдает ошибку
Код: 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql оракл Не получается создать триггер..Выдает ошибку / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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