Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
1

Ошибка Error at line 16: PLS-00103: Encountered the symbol ""

04.04.2016, 23:56. Просмотров 4285. Ответов 22
Метки нет (Все метки)


При добавление или обновлении таблицы TEAM данные о команде заносятся в таблицу GROUPS_TEAM, если это команда есть в таблице ГрупсТим, то выдается ошибка. При компиляция возникла такая ошибка и не знаю как ее исправить
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create or replace TRIGGER Tablica
after insert or update on TEAM
for each row 
declare
rowcount integer(4);
begin
SELECT ID_TEAM into rowcount
FROM GROUPS_TEAM
WHERE ID_TEAM IN
(SELECT ID_TEAM FROM GROUPS_TEAM 
GROUP BY ID_TEAM HAVING COUNT(*)>1);
IF rowcount > 0 THEN
 BEGIN
    DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена');
 RETURN;
END;
END IF;
insert into Team(NAME,ID_TEAM)Values(:new.TEAM,:new.ID_TEAM);
end;
Ошибка
Error at line 16: PLS-00103: Encountered the symbol ""

1. create or replace TRIGGER Tablica
2. after insert or update on TEAM
3. for each row
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2016, 23:56
Ответы с готовыми решениями:

PLS-00103: Encountered the symbol ";" when expecting one of the following
В файле function.sql поместила код определения и вызова функции: CREATE OR REPLACE FUNCTION...

Триггер и PLS-00103: Encountered the symbol ""
create or replace trigger Valid_sklad /* Триггер, позволяющий оформить заказ только при наличии...

Ошибка "Encountered the symbol 'end-of-file' when expecting one of the following"
CREATE OR REPLACE PROCEDURE PROCEDURE_01 IS DECLARE TYPE GENERIC_CURSOR IS REF CURSOR; cur1...

Ошибка при подключении плагина QPSQL "Symbol lookup error undefined symbol pqstatus"
Подскажите пожалуйста. Подключила драйвер PSQL, но при попытке выполнить код QSqlDatabase db...

22
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,344
05.04.2016, 09:36 2
Цитата Сообщение от Xesus Посмотреть сообщение
BEGIN DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена'); RETURN; END;
Зачем здесь блок BEGIN-END? Это же не Pascal/Delphi.
Да и RETURN вызывает сомнения. Лично я ни разу его не видел в триггере. Не уверен, что он там допустим.

PS
SELECT тоже странный, поскольку там нет никакого сравнения с :NEW.id_team
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 10:03 3
Цитата Сообщение от Xesus Посмотреть сообщение
insert into Team(NAME,ID_TEAM)Values(:new.TEAM,:new.ID_TEAM);
Вы работаете в Oracle или какой-то другой СУБД? Даже если триггер откомпилится, он должен выдать ошибку при попытке вставить строку в ту же таблицу в триггере before insert. У меня выдается ошибка ORA-00036: maximum number of recursive SQL levels (50) exceeded. Но я не исключаю, что могут быть и другие ошибки.
Уточните словами, чего Вы хотите
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 14:34  [ТС] 4
Сначала у меня идет проверка в таблице GROUPS_TEAM есть ли команда, которую я хочу ввести в таблицу TEAM.Если она есть, то выдается ошибка о том, что данная команда уже добавлена в GROUPS_TEAM . Если нет, то её название(Name) и ID_TEAM Добавятся в GROUPS_TEAM
работаю в ORACLE
0
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,344
05.04.2016, 15:15 5
Цитата Сообщение от Xesus Посмотреть сообщение
есть ли команда, которую я хочу ввести в таблицу TEAM
1. Еще раз - в твоем SELECT нет сравнения с вводимой командой
2. Твоя ошибка никак не предотвратит INSERT OR UPDATE. Для того, чтобы отменить тек. операцию, надо выдать RAISE (или raise_application_error).
3. Не надо самому вставлять строку в ту же таблицу, на которую навешен триггер. Операция уже инициирована, иначе бы триггер не сработал.

PS
Почитай еще раз про триггера. Такое впечатление, что ты не понимаешь сути их работы.
1
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 15:41 6
Цитата Сообщение от Xesus Посмотреть сообщение
Если нет, то её название(Name) и ID_TEAM Добавятся в GROUPS_TEAM
Сопоставьте две Ваши цитаты
MySQL
1
insert into Team(NAME,ID_TEAM)Values(:new.TEAM,:new.ID_TEAM);
Вторая ошибочна. Должно быть
MySQL
1
insert into Groups_Team...
Я бы сделал так
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE OR REPLACE TRIGGER Tablica
after INSERT OR UPDATE ON TEAM
FOR each ROW 
DECLARE
    rowcount NUMBER;
BEGIN
    SELECT COUNT(*) INTO rowcount
    FROM GROUPS_TEAM
    WHERE ID_TEAM = :NEW.ID_TEAM;
    IF rowcount > 0 THEN
    BEGIN
       DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена');
    ELSE
       INSERT INTO GROUPS_TEAM(NAME,ID_TEAM)VALUES(:NEW.TEAM,:NEW.ID_TEAM);
    END IF;
END;
Добавлено через 20 минут
Цитата Сообщение от Grossmeister Посмотреть сообщение
2. Твоя ошибка никак не предотвратит INSERT OR UPDATE.
Может и не надо предотвращать INSERT OR UPDATE. Может быть, надо просто избежать повторной вставки в таблицу с уникальным индексом
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 16:56  [ТС] 7
Спасибо. Но это вообщем не работает) когда в TEAMS создаю команду, с таким же названием, то в GROUPS_TEAM она создается с новым ID_TEAM
Попытался сделать, чтобы сравнивало по имени
MySQL
1
2
FROM GROUPS_TEAM
    WHERE TEAM = :NEW.TEAM;
Но выдает такую ошибку
Compilation failed, line 6 (16:53:52) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers.
PLS-00049: bad bind variable 'NEW.TEAM'
0
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,344
05.04.2016, 17:02 8
Цитата Сообщение от Xesus Посмотреть сообщение
Но выдает такую ошибку
Приведи последний вариант текста. Навскидку: на основании твоей команды INSERT INTO GROUPS_TEAM(NAME
в GROUPS_TEAM нет поля TEAM
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:15 9
Ну я примерно представляю себе проблему. Несколько вопросов хочу задать
1) Правильно ли я понимаю, что когда Вы вставляете запись в TEAM, Вы хотите, чтобы ID_TEAM был не id строки в таблице TEAM, а id строки в таблице GROUPS_TEAM?
2) Как Вы представляете себе идентификацию типа новой команды, если ее даже еще нет в справочнике типов команд?
3) Можно ли удалить из таблиц TEAM и GROUPS_TEAM имеющиеся данные и начать заполнять их с нуля?
4) Можно ли прислать DDL-ки на таблицы TEAM и GROUPS_TEAM со всеми полями, триггерами и индексами?
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 17:16  [ТС] 10
С этим разобрался, а вот в таблице TEAM так же захотел, чтобы была только одна команда, вроде бы сделал такой же триггер
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace TRIGGER TEAM
after INSERT OR UPDATE ON TEAM
FOR each ROW 
DECLARE
rowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO rowcount
FROM TEAM
WHERE NAME=:NEW.NAME;
IF rowcount > 0 THEN
BEGIN
DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена');
end;
END IF;
END;
Но вот снова ошибка
Error at line 12: PLS-00103: Encountered the symbol ""

1. create or replace TRIGGER TEAM
2. after INSERT OR UPDATE ON TEAM
3. FOR each ROW
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:21 11
Не понимаю, зачем стоит begin end . И что за хрень там стоит в самом конце? Может в ней дело?

Добавлено через 1 минуту
Повторяю предложение. Полные DDL-ки в студию. Тогда можно создать таблицы у себя и экспериментировать
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 17:22  [ТС] 12
https://pp.vk.me/c629513/v6295... niL9XM.jpg
Вот скриншот
ЭМ, а есть какая-либо тема как прислать вам DDL?
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:26 13
Кстати, я не уверен, что имя триггера может повторять имя таблицы

Добавлено через 3 минуты
Во-первых, как я текст со скриншота возьму, руками, что ли, набирать буду? Или в сканер запихну? Во-вторых, одного триггера мало, надо понимать, какие у Вас поля. Неужели нет кнопки create ddl для таблиц?
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 17:31  [ТС] 14
Название поменял, ошибка та же

Добавлено через 4 минуты
Groups team
https://pp.vk.me/c629513/v6295... J1xsOA.jpg
Team
https://pp.vk.me/c629513/v6295... Jkqcgg.jpg
Код триггера
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
create or replace TRIGGER ALO
after INSERT OR UPDATE ON TEAM
FOR each ROW 
DECLARE
rowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO rowcount
FROM TEAM
WHERE NAME=:NEW.NAME;
IF rowcount > 0 THEN
DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена');
END IF;
END;
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:36 15
Плохое качество изображения, но я его увеличил. Там то же самое, что Вы писали раньше. Нужно какое-то средство разработки, которое умеет строить файлы, содержащие CREATE OR REPLACE для таблиц.
Для оракла можно использовать TOAD, Oracle Developer, SQL Developer, SQL Navigator, Embarcadero DBArtisan. Любой из них умеет создавать DDL-ки. Нужны полные DDL-ки таблиц

Добавлено через 1 минуту
Цитата Сообщение от Xesus Посмотреть сообщение
END;​
Опять у Вас какой-то странный символ в конце
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 17:37  [ТС] 16
Вообщем эту проблему никак не решить, если что-то исправить в коде? Просто время поджимает, а разбираться в средствах разработки нет времени? А через ограничения никак не сделать подобную вещь?
Символ добавляется, когда сюда только ввожу код
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:43 17
Понимаете, проблема не в том, что мне нужны Ваши поля. Проблема в том, что я хочу в точности воспроизвести Ваши таблицы, а для этого нужно что-то вроде такого
SQL
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
CREATE TABLE test
   (inventar                       NUMBER NOT NULL,
    date_give                      DATE NOT NULL,
    date_back                      DATE)
/
 
 
CREATE UNIQUE INDEX i1_test ON test
  (
    inventar                        ASC,
    NVL("DATE_BACK",TO_DATE(' 4000-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) ASC
  )
/
 
CREATE UNIQUE INDEX i2_test ON test
  (
    inventar                        ASC,
    date_give                       ASC
  )
  PCTFREE     10
  INITRANS    2
  MAXTRANS    255
  TABLESPACE  users
  STORAGE   (
    INITIAL     65536
    NEXT        1048576
    MINEXTENTS  1
    MAXEXTENTS  2147483645
  )
NOPARALLEL
LOGGING
/
 
 
 
-- Triggers for TEST
 
CREATE OR REPLACE TRIGGER TEST_TBI
 BEFORE 
 INSERT OR UPDATE
 ON TEST
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW
DECLARE
    dmax    DATE := TO_DATE('40000101','yyyymmdd');
    dmin    DATE := TO_DATE('10000101','yyyymmdd');
    PROCEDURE proc1 IS
        date_give_min       DATE;
        date_give_max       DATE;
        date_back_min       DATE;
        date_back_max       DATE;
        PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
        SELECT nvl(MIN(t.date_back), dmax) INTO date_back_min
        FROM test t, dual d
        WHERE t.inventar(+) = :NEW.inventar
          AND nvl(t.date_give(+), dmax) > NVL(:NEW.date_back, dmax)
          AND nvl(t.date_back(+), dmax) > NVL(:NEW.date_back, dmax)
          AND d.dummy=REPLACE(t.rowid(+),t.rowid(+),d.dummy)
        GROUP BY t.inventar;
        --
        SELECT nvl(MAX(t.date_back), dmin) INTO date_back_max
        FROM test t, dual d
        WHERE t.inventar(+) = :NEW.inventar
          AND nvl(t.date_back(+), dmin) < NVL(:NEW.date_back, dmax)
          AND nvl(t.date_give(+), dmin) < NVL(:NEW.date_back, dmax)
          AND d.dummy=REPLACE(t.rowid(+),t.rowid(+),d.dummy)
        GROUP BY t.inventar;
        --
        SELECT nvl(MAX(t.date_give), dmin) INTO date_give_max
        FROM test t, dual d
        WHERE t.inventar(+) =:NEW.inventar
          AND nvl(t.date_back(+), dmin) < :NEW.date_give
          AND nvl(t.date_give(+), dmin) < :NEW.date_give
          AND d.dummy=REPLACE(t.rowid(+),t.rowid(+),d.dummy)
        GROUP BY t.inventar;
        --
        SELECT nvl(MIN(t.date_give), dmax) INTO date_give_min
        FROM test t, dual d
        WHERE t.inventar(+) =:NEW.inventar
          AND nvl(t.date_back(+), dmax) > :NEW.date_give
          AND nvl(t.date_give(+), dmax) > :NEW.date_give
          AND d.dummy=REPLACE(t.rowid(+),t.rowid(+),d.dummy)
        GROUP BY t.inventar;
        COMMIT;
        
        IF NOT (:NEW.date_give BETWEEN date_back_max AND date_back_min) THEN
            raise_application_error(-20001,'Неверная дата начала');
        END IF;
        IF NOT (:NEW.date_back BETWEEN date_give_max AND date_give_min) THEN
            raise_application_error(-20001,'Неверная дата конца');
        END IF;
    END;
    
BEGIN
    IF :NEW.date_give > NVL(:NEW.date_back, dmax) THEN
        raise_application_error(-20001,'Дата начала больше даты конца');
    END IF;
 
    proc1;
END;
/
 
CREATE OR REPLACE TRIGGER TEST_TAI
 AFTER 
 INSERT OR UPDATE
 ON TEST
 REFERENCING OLD AS OLD NEW AS NEW
DECLARE
    dmax    DATE := TO_DATE('40000101','yyyymmdd');
    dmin    DATE := TO_DATE('10000101','yyyymmdd');
BEGIN
    FOR vv IN  (SELECT tt.inventar, nvl(tt.date_back,dmax) date_back, tt.date_give,
                       nvl(MIN(t.date_back), dmax) date_back_min
                FROM test t , tmp_test tt, dual d
                WHERE t.inventar(+) = tt.inventar
                  AND nvl(t.date_give(+), dmax) > tt.date_back
                  AND nvl(t.date_back(+), dmax) > tt.date_back
                  AND t.ROWID(+)<>tt.id
                  AND d.dummy=REPLACE(tt.rowid(+),tt.rowid(+),d.dummy)
                GROUP BY tt.inventar, nvl(tt.date_back,dmax), tt.date_give)
    LOOP
        UPDATE tmp_test tt
            SET date_back_min = vv.date_back_min
        WHERE inventar=vv.inventar
          AND nvl(date_back,dmax) = nvl(vv.date_back,dmax)
          AND date_give = vv.date_give;
    END LOOP;
    --
    FOR vv IN  (SELECT tt.inventar, nvl(tt.date_back,dmax) date_back, tt.date_give,
                       nvl(MAX(t.date_back), dmin) date_back_max
                FROM test t , tmp_test tt, dual d
                WHERE t.inventar(+) =tt.inventar
                  AND nvl(t.date_back(+), dmin) < tt.date_back
                  AND nvl(t.date_give(+), dmin) < tt.date_back
                  AND t.ROWID(+)<>tt.id
                  AND d.dummy=REPLACE(tt.rowid(+),tt.rowid(+),d.dummy)
                GROUP BY tt.inventar, nvl(tt.date_back,dmax), tt.date_give)
    LOOP
        UPDATE tmp_test tt
            SET date_back_max = vv.date_back_max
        WHERE inventar=vv.inventar
          AND nvl(date_back,dmax) = nvl(vv.date_back,dmax)
          AND date_give = vv.date_give;
    END LOOP;
    --
    FOR vv IN  (SELECT tt.inventar, nvl(tt.date_back,dmax) date_back, tt.date_give,
                       nvl(MAX(t.date_give), dmin) date_give_max
                FROM test t , tmp_test tt, dual d
                WHERE t.inventar(+) =tt.inventar
                  AND nvl(t.date_back(+), dmin) < tt.date_give
                  AND nvl(t.date_give(+), dmin) < tt.date_give
                  AND t.ROWID(+)<>tt.id
                  AND d.dummy=REPLACE(tt.rowid(+),tt.rowid(+),d.dummy)
                GROUP BY tt.inventar, nvl(tt.date_back,dmax), tt.date_give)
    LOOP
        UPDATE tmp_test tt
            SET date_give_max = vv.date_give_max
        WHERE inventar=vv.inventar
          AND nvl(date_back,dmax) = nvl(vv.date_back,dmax)
          AND date_give = vv.date_give;
    END LOOP;
    --
    FOR vv IN  (SELECT tt.inventar, nvl(tt.date_back,dmax) date_back, tt.date_give,
                       nvl(MIN(t.date_give), dmax) date_give_min
                FROM test t , tmp_test tt, dual d
                WHERE t.inventar(+) =tt.inventar
                  AND nvl(t.date_back(+), dmax) > tt.date_give
                  AND nvl(t.date_give(+), dmax) > tt.date_give
                  AND t.ROWID(+)<>tt.id
                  AND d.dummy=REPLACE(tt.rowid(+),tt.rowid(+),d.dummy)
                GROUP BY tt.inventar, nvl(tt.date_back,dmax), tt.date_give)
    LOOP
        UPDATE tmp_test tt
            SET date_give_min = vv.date_give_min
        WHERE inventar=vv.inventar
          AND nvl(date_back,dmax) = nvl(vv.date_back,dmax)
          AND date_give = vv.date_give;
    END LOOP;
    --
    FOR vv IN (SELECT DISTINCT * FROM tmp_test)
    LOOP
        IF NOT (vv.date_give BETWEEN vv.date_back_max AND vv.date_back_min) THEN
            raise_application_error(-20001,'Неверная дата начала');
        END IF;
        IF NOT (vv.date_back BETWEEN vv.date_give_max AND vv.date_give_min) THEN
            raise_application_error(-20001,'Неверная дата конца');
        END IF;
    END LOOP;
END;
/
 
CREATE OR REPLACE TRIGGER TEST_TBIUD
 BEFORE 
 INSERT OR UPDATE OR DELETE 
 ON TEST
 REFERENCING OLD AS OLD NEW AS NEW
BEGIN
    DELETE FROM tmp_test;
END;
/
 
CREATE OR REPLACE TRIGGER TESTPBX_TBI
 BEFORE 
 INSERT OR UPDATE
 ON TEST
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW
DECLARE
    dmax    DATE := TO_DATE('40000101','yyyymmdd');
    dmin    DATE := TO_DATE('10000101','yyyymmdd');
BEGIN
    IF :NEW.date_give > NVL(:NEW.date_back, dmax) THEN
        raise_application_error(-20001,'Дата начала больше даты конца');
    END IF;
END;
/
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 17:55  [ТС] 18
Вот для MATCH такое пойдет?
MySQL
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
CREATE TABLE  "MATCH" 
   (    "ID_MATCH" NUMBER NOT NULL ENABLE, 
    "FIRST_TEAM" VARCHAR2(256) NOT NULL ENABLE, 
    "SECOND_TEAM" VARCHAR2(256) NOT NULL ENABLE, 
    "STADIUM" VARCHAR2(256) NOT NULL ENABLE, 
    "CITY" VARCHAR2(256), 
    "REFEREE" VARCHAR2(256), 
    "SCORE_1_TEAM" NUMBER NOT NULL ENABLE, 
    "SCORE_2_TEAM" NUMBER NOT NULL ENABLE, 
    "ID_1_TEAM" NUMBER NOT NULL ENABLE, 
    "ID_2_TEAM" NUMBER NOT NULL ENABLE, 
    "ID_STADIUM" NUMBER NOT NULL ENABLE, 
    "ID_REFEREE" NUMBER NOT NULL ENABLE, 
     CONSTRAINT "MATCH_PK" PRIMARY KEY ("ID_MATCH") ENABLE
   ) ;ALTER TABLE  "MATCH" ADD CONSTRAINT "MATCH_1TEAM" FOREIGN KEY ("ID_1_TEAM")
      REFERENCES  "TEAM" ("ID_TEAM") ENABLE;ALTER TABLE  "MATCH" ADD CONSTRAINT "MATCH_2TEAM" FOREIGN KEY ("ID_2_TEAM")
      REFERENCES  "TEAM" ("ID_TEAM") ENABLE;ALTER TABLE  "MATCH" ADD CONSTRAINT "MATCH_REFFK" FOREIGN KEY ("ID_REFEREE")
      REFERENCES  "REFEREE" ("ID_REFEREE") ENABLE;ALTER TABLE  "MATCH" ADD CONSTRAINT "MATCH_STADIUMFK" FOREIGN KEY ("ID_STADIUM")
      REFERENCES  "STADIUM" ("ID_STADIUM") ENABLE;
 
CREATE OR REPLACE TRIGGER  "BI_MATCH" 
  before insert on "MATCH"               
  for each row  
begin   
  if :NEW."ID_MATCH" is null then 
    select "MATCH_SEQ".nextval into :NEW."ID_MATCH" from dual; 
  end if; 
end; 
 
/
ALTER TRIGGER  "BI_MATCH" ENABLE;
Добавлено через 10 минут
GROUP_TEAMS
MySQL
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
Table
Data
Indexes
Model
Constraints
Grants
Statistics
UI Defaults
Triggers
Dependencies
SQL
 
CREATE TABLE  "GROUPS_TEAM" 
   (    "ID_GROUP" NUMBER NOT NULL ENABLE, 
    "TEAM" VARCHAR2(256) NOT NULL ENABLE, 
    "WIN" NUMBER, 
    "DRAW" NUMBER, 
    "LOSE" NUMBER, 
    "SCORE" NUMBER, 
    "ID_TEAM" NUMBER, 
     CONSTRAINT "GROUPS_TEAM_PK" PRIMARY KEY ("ID_GROUP") ENABLE
   ) ;ALTER TABLE  "GROUPS_TEAM" ADD CONSTRAINT "GROUPS_TEAM_CON" FOREIGN KEY ("ID_TEAM")
      REFERENCES  "TEAM" ("ID_TEAM") ENABLE;
 
CREATE OR REPLACE TRIGGER  "BI_GROUPS_TEAM" 
  before insert on "GROUPS_TEAM"               
  for each row  
begin   
  if :NEW."ID_GROUP" is null then 
    select "GROUPS_TEAM_SEQ".nextval into :NEW."ID_GROUP" from dual; 
  end if; 
end; 
 
/
ALTER TRIGGER  "BI_GROUPS_TEAM" ENABLE;
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
05.04.2016, 17:57 19
Я воссоздал Ваш триггер у себя, и он замечательно откомпилился.
Сейчас попробую воспроизвести Ваши таблицы
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 14
05.04.2016, 18:11  [ТС] 20
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create or replace TRIGGER TEAM1234
after INSERT OR UPDATE ON TEAM
FOR each ROW 
DECLARE
rowcount NUMBER;
BEGIN
SELECT COUNT(*) INTO rowcount
FROM TEAM
WHERE NAME=:NEW.NAME;
IF rowcount > 0 THEN
DBMS_OUTPUT.PUT_LINE ('Эта команда уже добавлена');
 ELSE
begin
       INSERT INTO TEAM(COACH,Name,ID_COACH)VALUES(:new.COACH,:NEW.Name,:New.Id_coach);
end;
END IF;
END;
Данный триггер я скомпилировал, но при добавление команды выдает ошибку
ORA-04091: table CUP.TEAM is mutating, trigger/function may not see it ORA-06512: at "CUP.TEAM1234", line 4 ORA-04088: error during execution of trigger 'CUP.TEAM1234'
Unable to process row of table TEAM.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2016, 18:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка в Call of Duty 2: "DirectX encountered an unrecoverable error"
Вылезает - directx encountered an unrecoverable error Гугл ничего путного не сказал. Чё делать?

Ошибка при запуске Call of Duty 2: "DirectX encountered an unrecoverable error"
Помогите пожалусто. Скачал игру Call of Duty 2, установил игру сразу поставил DirectX 9.0c с того...

Ошибка "Parse error: syntax error, unexpected $end in shCacheContent.php on line 9406"
Добрый день всем! Прошу помочь с ошибкой Parse error: syntax error, unexpected $end in...

Ошибка "Divide BY zero error encountered"
SELECT (SELECT (tbl_OfferingInOpportunity1.TotalAmount / tbl_OfferingInOpportunity1.Quantity)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.