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

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