Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak pobrac ID wstawionego rekordu ?
Forum PHP.pl > Forum > Bazy danych > Oracle
tomking
Posiadam tabele:

  1. CREATE TABLE ZAMOWIENIE(
  2. ID_ZAMOWIENIE INTEGER NOT NULL,
  3. ID_KLIENT INTEGER NOT NULL,
  4. Data_zamowienia DATE DEFAULT SYSTIMESTAMP,
  5. Czas_zamowienia TIMESTAMP DEFAULT SYSTIMESTAMP,
  6. PRIMARY KEY(ID_ZAMOWIENIE)
  7. );


Wiawiam rekord do tej tabeli (Z POZIOMU PHPów):

  1. INSERT INTO ZAMOWIENIE (ID_KLIENT,Data_zamowienia,Czas_zamowienia)
  2. VALUES(1,to_date('2001/05/01','yyyy/mm/dd'),SYSTIMESTAMP);


Klucz glowny tabeli (ID_ZAMOWIENIE) jest inkrementowany poprzez trigger:

  1. CREATE SEQUENCE seqZamowienie;
  2. SELECT seqZamowienie.NEXTVAL FROM dual;


  1. CREATE TRIGGER TriZAMOWIENIE
  2. BEFORE INSERT ON ZAMOWIENIE FOR EACH ROW
  3. BEGIN SELECT seqZamowienie.NEXTVAL INTO :new.id_zamowienie FROM DUAL;
  4. END;
  5. /


PROBLEM: JAK ZA POMOCA PHP POBRAC ID WSTAWIONEGO REKORDU?questionmark.gif
lukask
A po co sobie komplikujesz życie definiując trigger na kolumnie id? Albo najpierw pobierz id z sequence i podstaw jawnie we frazie INSERT albo napisz sobie procedurę w PL/SQL, która wstawi rekord z odpowiednimi wartościami i zwróci wartość id wstawionego rekordu.
abusiek
Poza tym jesli chcesz inkrementowac klucz glowny to daj mu typ serial i bedzie sie sam zwiekszal (stworzy sie dla niego sekwencja), a id wstawionego rekordu pobierasz tak:

insert into costam values(default, 'adrian'); select currval('nazwa_sekwencji');

i tyle
rnmt
CURRVAL podaje bieżącą wartość sekwencji. Jeżeli w drugiej sesji ktoś uruchomi tą samą procedurę, w tym samym czasie, co ty, możecie dostać ten sam wynik.

Pobieranie wartości sekwencji na trg jest najlepszym rozwiązaniem. Budując kolejny interfejs wstawiający dane do tej samej tabeli nie musisz powielać obsługi sekwencji.

  1. begin INSERT INTO ZAMOWIENIE (ID_KLIENT,Data_zamowienia,Czas_zamowienia)
  2. VALUES(1,to_date('2001/05/01','yyyy/mm/dd'),SYSTIMESTAMP)
  3. returning ID_ZAMOWIENIE INTO :twoja_nowa_zmienna; end;
  4. /
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-2025 Invision Power Services, Inc.