Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mechanizm dodawania nowych wierszy
Forum PHP.pl > Forum > Bazy danych > Oracle
trze_
Witam
próbuje napisać mechanizm wstawiania nowych wierszy w tabeli.
tabela produkty(numer_seryjny,nazwa,liczba)

Mechanizm wstawiania w przypadku wysłania polecenia INSERT o postaci:
insert into produkty (nazwa,liczba) values ('xsxsxsxs',4);

W tabeli produkty mają pojawić się 4 (cztery) nowe wiersze w takiej postaci
'xsxsxsxs',1
'xsxsxsxs',1
'xsxsxsxs',1
'xsxsxsxs',1

Jak rozwiązać problem dodawania 4 wierszy w tym przypadku?
mar1aczi
Napisać funkcję/procedurę (w zależności gdzie i jak będziesz z tego korzystał).
kujol
Wsadź to w pętle.
trze_
na chwilę obecną mam taki trigger ( liczba nie jest zapisywana jako jedynka), sprawdzę wieczorem wersje z pętlą i dam znać.
  1. CREATE OR REPLACE TRIGGER my_tr_produkty
  2. before INSERT ON my_produkty
  3. FOR each row
  4. when (new.liczba >= 1)
  5. declare
  6. v_liczba integer:= :new.liczba;
  7. BEGIN
  8. :new.numer_seryjny := seq_numer_seryjny.NEXTVAL;
  9. :new.liczba := :new.liczba -1;
  10. END ;
  11. /
  12. SHOW errors


mar1aczi
Jaką funkcjonalność spełnia ów trigger w odniesieniu do "problemu", który przedstawiłeś?
trze_
wersja po poprawkach z numerem seryjnym.
  1. CREATE OR REPLACE TRIGGER my_tr_produkty
  2. BEFORE INSERT ON my_produkty
  3. FOR EACH ROW
  4. declare
  5. v_liczba NUMBER:= :new.liczba;
  6. BEGIN
  7. :new.liczba := 1;
  8. :new.numer_seryjny := seq_numer_seryjny.NEXTVAL;
  9. IF (v_liczba >1) then
  10. FOR i IN 1..(v_liczba -1)
  11. LOOP
  12. INSERT INTO my_produkty(numer_seryjny,symbol,liczba) VALUES (:new.numer_seryjny,:new.symbol,:new.liczba);
  13. END LOOP;
  14. end IF;
  15. END ;
  16. /
  17. SHOW errors
amdziak
nie lepiej napisac procedure, ktora, bedzie miala dwa parametry:
1) wartosc varchar2(255)
2) ilosc number default 1

wsadzasz to w for'a ktory powtarza inserty tyle razy ile wynosi paramter ilosc .

for i in ilosc

loop
insert into table values wartosc;
end loop

E: ten trigger to raczej nic Ci nie da, ewentualnie moze sie ladnie zapetlic...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.