2013-09-11 4 views
0

Привет, я новичок в Oracle Databases и тестирую некоторые функции. Теперь у меня есть проблемы с вместо триггеров.Исключение Oracle вместо триггера

Это мой код:

CREATE TABLE team(
    teamid integer PRIMARY KEY, 
    team VARCHAR2(100) 
); 


CREATE TABLE player(
    playerid integer PRIMARY KEY, 
    player VARCHAR2(100), 
    position VARCHAR2(100), 
    teamid integer REFERENCES team(teamid) 
); 


INSERT ALL 
    INTO team (teamid, team) VALUES (1, 'FC Bayern Muenchen') 
    INTO team (teamid, team) VALUES (2, 'Manchester United') 
SELECT * FROM DUAL; 


INSERT ALL 
    INTO player (playerid, player, position, teamid) VALUES (1, 'Manuel Neuer', 'goalkeeper', 1) 
    INTO player (playerid, player, position, teamid) VALUES (2, 'Dante', 'defense', 1) 
    INTO player (playerid, player, position, teamid) VALUES (3, 'Cesc Fabregas', 'midfield', 2) 
    INTO player (playerid, player, position, teamid) VALUES (4, 'Lionel Messi', 'striker', 2) 
    INTO player (playerid, player, position, teamid) VALUES (5, 'Arjen Robben', 'midfield', 1) 
SELECT * FROM DUAL; 


CREATE VIEW view_player AS 
SELECT p.playerid,p.player,p.position, t.team FROM player p 
INNER JOIN team t 
ON p.teamid = t.teamid; 

Я получил последовательность и триггер для автоматического инкремента обеих таблиц. Это мой Вместо того Trigger:

CREATE OR REPLACE TRIGGER view_player_insert 
INSTEAD OF INSERT ON view_player 
FOR EACH ROW 
DECLARE 
    NUMBER anzTeams; 
    NUMBER teamID; 
BEGIN 
    SELECT count(*) INTO anzTeams FROM team WHERE team=:NEW.team; 
    IF anzTeams > 0 
    THEN 
     INSERT INTO team(team) VALUES (:NEW.team); 
    END IF; 

    SELECT teamid INTO teamID FROM team WHERE team=:NEW.team; 
    INSERT INTO player(player,position,fbid) VALUES (:NEW.player,:NEW.position,teamID); 
END; 

Я получил это исключение с моей Вместо того Trigger:

Exception в строке 12: PL/SQL: SQL Statement игнорировали

I думаю, что у меня ошибка синтаксиса, но я не знаю, кто. Я надеюсь, что вы можете мне помочь :)

Greetz Ulti

ответ

0

Больше комментарий (не могу комментировать, каламбур).

  • Я не знал, что вы можете иметь одинаковые столбцы и имена таблиц.

  • В предложении оговорки порядок имен переменных и типа может быть взаимозаменяем. В последнем утверждении изменится fbid с идентификатором teamID. С этими двумя изменениями запускается триггер. Я не получил никаких ошибок в строке 12.

+0

А теперь я тоже не получил никаких ошибок. но если я сделать новую вставку я получил эти исключения:/ ORA-01422: Exakter Abruf Gibt Mehr ALS умирают angeforderte Zeilenzahl Zurück ORA-06512: в "SYSTEM.VIEW_PLAYER_INSERT", Zeile 11 ORA-04088: Fehler BEI дер Ausführung von Trigger 'SYSTEM.VIEW_PLAYER_INSERT' – Ulti

+0

Я думаю, что вы хотите сделать IF anzTeams = 0, а не IF anzTeams> 0. – Paddy

+0

О, боже мой, я такой слепой и отсталый! спасибо :) – Ulti

Смежные вопросы