Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mechanizm dodawania nowych wierszy
trze_
post 9.01.2014, 23:04:10
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.06.2013

Ostrzeżenie: (0%)
-----


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?

Ten post edytował trze_ 10.01.2014, 01:08:24
Go to the top of the page
+Quote Post
mar1aczi
post 10.01.2014, 08:55:45
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Napisać funkcję/procedurę (w zależności gdzie i jak będziesz z tego korzystał).


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
kujol
post 10.01.2014, 09:27:53
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


Wsadź to w pętle.


--------------------
;)
Go to the top of the page
+Quote Post
trze_
post 10.01.2014, 11:11:30
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.06.2013

Ostrzeżenie: (0%)
-----


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


Go to the top of the page
+Quote Post
mar1aczi
post 10.01.2014, 11:18:22
Post #5





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Jaką funkcjonalność spełnia ów trigger w odniesieniu do "problemu", który przedstawiłeś?


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
trze_
post 12.01.2014, 21:23:27
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 28.06.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
amdziak
post 15.01.2014, 13:38:31
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 2.01.2012

Ostrzeżenie: (0%)
-----


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...

Ten post edytował amdziak 15.01.2014, 13:40:48
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.06.2024 - 05:08