Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ORACLE] Insert kilku wierszy
topcio
post 30.10.2018, 20:50:10
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 14.01.2017

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


Witajcie
mam coś takiego (poniżej) i potrzebuję aby dla każdego wyniku w pętli for dodał się osobny wiersz w tabeli, proszę o pomoc.
Oraz drugie pytanie
Czy kolumna TYP_WEZLA może być typem NUMBER, jeśli ustawię ją w typ NUMBER dostaję info, że wprowadzone dane nie są NUMBER, a przecież zamieniam stringa na 0 albo 1.


  1. CREATE OR REPLACE TRIGGER BEFORE_INSERT_WEZLY
  2. BEFORE INSERT ON WEZLY
  3. REFERENCING OLD AS OLD NEW AS NEW
  4. FOR EACH ROW
  5.  
  6.  
  7. BEGIN
  8. <<START_TRIGGER>>
  9.  
  10. IF :NEW.TYP_WEZLA LIKE 'a' THEN :NEW.TYP_WEZLA := 1; END IF;
  11. IF :NEW.TYP_WEZLA LIKE 'b' THEN :NEW.TYP_WEZLA := 0; END IF;
  12.  
  13. IF :NEW.TYP_WEZLA = 0
  14. THEN
  15. FOR i IN (SELECT LEVEL, trim(regexp_substr(:NEW.GREEN_NUMBER_OF_BOX_STRING, '[^,]+', 1, LEVEL)) NODE FROM dual
  16. CONNECT BY regexp_substr(:NEW.GREEN_NUMBER_OF_BOX_STRING , '[^,]+', 1, LEVEL) IS NOT NULL )
  17. LOOP
  18. SELECT WEZLY_SEQUENCE.NEXTVAL INTO :NEW.ID FROM DUAL;
  19. END LOOP;
  20. END IF;
  21. END;
  22.  
Go to the top of the page
+Quote Post
mmmmmmm
post 31.10.2018, 09:26:28
Post #2





Grupa: Zarejestrowani
Postów: 1 401
Pomógł: 306
Dołączył: 18.04.2012

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


Kolumna TYP_WEZLA oczywiście może być NUMBER, ale musiałbyś zmienić wprowadzanie danych.
  1. IF :NEW.TYP_WEZLA LIKE 'a' THEN :NEW.TYP_WEZLA := 1; END IF;

Jak widać, wprowadzasz do rekrodu (przed zapisem) dane typu 'a', 'b'..., a baza działa tak, że najpierw jest tworzony obiekt "old" i "new" takiego samego typu jak trrekored danej tabeli. Do "old" pobierane są wartości aktualne, a do "new", te które chcesz wpisać. I właśnie do "new" do pola NUMBER nie możesz wpisać 'a'. To nie jest błąd triggera, bo to się dzieje zanim jeszcze trigger zacznie działać...
Go to the top of the page
+Quote Post
topcio
post 1.11.2018, 12:39:41
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 14.01.2017

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


Czy dobrze rozumiem, że powinienem wpisać
  1. IF :OLD.TYP_WEZLA LIKE 'a' THEN :NEW.TYP_WEZLA := 1; END IF;
Go to the top of the page
+Quote Post
mmmmmmm
post 2.11.2018, 08:27:47
Post #4





Grupa: Zarejestrowani
Postów: 1 401
Pomógł: 306
Dołączył: 18.04.2012

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


Źle rozumiesz. Jeśli jest typ kolumny NUMBER, to ani w OLD, anie w NEW nie ma prawa znaleźć się 'a'.
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: 14.11.2018 - 23:26