trze_
9.01.2014, 23:04:10
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
10.01.2014, 08:55:45
Napisać funkcję/procedurę (w zależności gdzie i jak będziesz z tego korzystał).
kujol
10.01.2014, 09:27:53
Wsadź to w pętle.
trze_
10.01.2014, 11:11:30
na chwilę obecną mam taki trigger ( liczba nie jest zapisywana jako jedynka), sprawdzę wieczorem wersje z pętlą i dam znać.
CREATE OR REPLACE TRIGGER my_tr_produkty
before INSERT ON my_produkty
FOR each row
when (new.liczba >= 1)
declare
v_liczba integer:= :new.liczba;
BEGIN
:new.numer_seryjny := seq_numer_seryjny.NEXTVAL;
:new.liczba := :new.liczba -1;
END ;
/
SHOW errors
mar1aczi
10.01.2014, 11:18:22
Jaką funkcjonalność spełnia ów trigger w odniesieniu do "problemu", który przedstawiłeś?
trze_
12.01.2014, 21:23:27
wersja po poprawkach z numerem seryjnym.
CREATE OR REPLACE TRIGGER my_tr_produkty
BEFORE INSERT ON my_produkty
FOR EACH ROW
declare
v_liczba NUMBER:= :new.liczba;
BEGIN
:new.liczba := 1;
:new.numer_seryjny := seq_numer_seryjny.NEXTVAL;
IF (v_liczba >1) then
FOR i IN 1..(v_liczba -1)
LOOP
INSERT INTO my_produkty(numer_seryjny,symbol,liczba) VALUES (:new.numer_seryjny,:new.symbol,:new.liczba);
END LOOP;
end IF;
END ;
/
SHOW errors
amdziak
15.01.2014, 13:38:31
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.