Avatar billede mpej Nybegynder
17. november 2004 - 14:51 Der er 7 kommentarer og
2 løsninger

mere fra mig - trigger-fejl

Hej igen.
Jeg har lige haft et spørgsmål åbent om et mindre problem. Nu er jeg løbet på det næste...

Jeg er ikke så hærdet i SQL endnu. Følgende trigger giver vrøvl i kompileringen, men jeg ved ikke hvad. Nogen idéer?


CREATE OR REPLACE TRIGGER maxMovie
    BEFORE INSERT OR UPDATE ON genre
    FOR EACH ROW
    DECLARE
        count NUMBER(1)
    BEGIN
        IF INSERTING THEN
        count=(
                      SELECT COUNT(movieid)
                      FROM genre
                      WHERE movieid=:new.movieid
                );
        IF (count>=3) THEN
            RAISE_APPLICATION_ERROR(-20225,
                              'For mange genrer');
        END IF;
    END;
Avatar billede mpej Nybegynder
17. november 2004 - 14:54 #1
og det er ikke den manglende apostrof i DECLARE (efter NUMBER(1))
Avatar billede teepee Nybegynder
17. november 2004 - 14:54 #2
Count er vist et reserveret ord. Brug noget andet, og så omskriv til følgende:
select count(x)
into l_count
from...
Avatar billede teepee Nybegynder
17. november 2004 - 14:55 #3
..altså drop det der hvor du skriver count = (select...)
Avatar billede mpej Nybegynder
17. november 2004 - 14:57 #4
CREATE OR REPLACE TRIGGER maxMovie
    BEFORE INSERT OR UPDATE ON genre
    FOR EACH ROW
    DECLARE
        cnt NUMBER(1);
    BEGIN
        IF INSERTING THEN
       
                      SELECT COUNT(movieid)
                      INTO cnt
                      FROM genre
                      WHERE movieid=:new.movieid
                );
        IF (count>=3) THEN
            RAISE_APPLICATION_ERROR(-20225,
                              'For mange genrer');
        END IF;
    END;

--------

der er stadig fejl
Avatar billede teepee Nybegynder
17. november 2004 - 14:58 #5
Iøvrigt så skal du vist bare droppe din IF INSERTING ellers kan du opdatere dig til flere rækker
Avatar billede holdam Nybegynder
17. november 2004 - 14:58 #6
Du får fat i fejlteksten ved at skrive SHOW ERRORS TRIGGER maxMovie i SQL*Plus. Det gør det lidt lettere at debugge trigger-koden...
Avatar billede teepee Nybegynder
17. november 2004 - 14:58 #7
Det ser godt ud
Avatar billede pgroen Nybegynder
17. november 2004 - 15:00 #8
bl.a er COUNT et reserveret ord...

CREATE OR REPLACE TRIGGER maxmovie
  BEFORE INSERT OR UPDATE
  ON genre
  FOR EACH ROW
DECLARE
  result  PLS_INTEGER;
BEGIN
  IF INSERTING
  THEN
    SELECT COUNT (*)
      INTO result
      FROM genre
    WHERE movieid = :NEW.movieid;

    IF (result >= 3)
    THEN
      raise_application_error (-20225, 'For mange genrer');
    END IF;
  END IF;
END;
Avatar billede mpej Nybegynder
17. november 2004 - 15:10 #9
Perfekt! Tak for hjælpen folkens!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester