Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Oracle _ [ORACLE] Insert kilku wierszy

Napisany przez: topcio 30.10.2018, 20:50:10

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.  

Napisany przez: mmmmmmm 31.10.2018, 09:26:28

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

Napisany przez: topcio 1.11.2018, 12:39:41

Czy dobrze rozumiem, że powinienem wpisać

  1. IF :OLD.TYP_WEZLA LIKE 'a' THEN :NEW.TYP_WEZLA := 1; END IF;

Napisany przez: mmmmmmm 2.11.2018, 08:27:47

Źle rozumiesz. Jeśli jest typ kolumny NUMBER, to ani w OLD, anie w NEW nie ma prawa znaleźć się 'a'.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)