Odpalenie procedury w warunku IF

0

Witam serdecznie !
Otóż zacząłem się bawić z PL/SQL i mam pewien problem a mianowicie:
Mam prostą procedurę:

CREATE OR REPLACE PROCEDURE dodaj_samochod(
id NUMBER,
marka VARCHAR2,
kolor VARCHAR2)
IS 
BEGIN
INSERT INTO SAMOCHODY VALUES(id,marka,kolor);
END;

I chciałbym jej użyć w warunku IF (już pomijając tego logikę, chodzi o sam fakt):

DECLARE
  TYPE cur_samochody IS REF CURSOR;
  cur_sam cur_samochody;
  sam samochody%rowtype;  
  BEGIN
    OPEN cur_sam FOR SELECT * FROM samochody;
    LOOP
      FETCH cur_sam INTO sam;
        Dbms_Output.put_line(sam.marka);
      IF sam.id = 4 THEN
        Begin    
        dodaj_samochod(5,'Renault','Czerowny');
        END;      
      END IF;  
      EXIT WHEN cur_sam%NOTFOUND;
    END LOOP;
  CLOSE cur_sam;
END;

Coś jest nie tak. Wywalm Begin i End i też nie działa. Kombinuję po swojemu po prostu. Co robię źle?

0

Jaki pojawia się błąd?

0

Naruszono więzy unikatowe (SEL.SYS_C00305865) przy SEL.DODAJ_SAMOCHOD ... SEL - to schemat

1

Naruszenie więzów integralności zazwyczaj oznacza iż próbujesz duplikować wartość dla klucza głównego tabeli do której wstawiasz dane. Obstawiam że kluczem głównym jest kolumna id. Sprawdź czy przypadkiem nie próbujesz wstawić id które już w bazie istnieje.

W Oraclu zazwyczaj korzysta się z sekwencji aby zachować unikatowe numery id.

0

To ciekawe bo dodałem nowy rekord w tabeli za pomocą:

begin
  dodaj_samochod(5,'Opel','Bialy');
END;

I działa.
Problem leży gdzieś w pętli. Coś robię źle, tylko co :P

1

Spróbuj czegoś takiego:

DECLARE
  sam samochody%ROWTYPE; 
  CURSOR cur_sam IS SELECT * FROM samochody;
BEGIN
    OPEN cur_sam;
    LOOP
      FETCH cur_sam INTO sam;
	  EXIT WHEN cur_sam%NOTFOUND;
	  
		DBMS_OUTPUT.put_line(sam.marka);
			
		IF sam.id = 4 THEN  
				dodaj_samochod(6,'Renault','Czerowny');
		END IF;  
      
    END LOOP;
	CLOSE cur_sam;
END;

zamiana znacznika <code class="sql"> na <code class="plsql"> - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1