Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak pobrac ID wstawionego rekordu ?
tomking
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.03.2006

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


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?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
lukask
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.01.2008

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


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.
Go to the top of the page
+Quote Post
abusiek
post
Post #3





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

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


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
Go to the top of the page
+Quote Post
rnmt
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.01.2008

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


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. /
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 7.10.2025 - 13:28