Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] procedura skladowana, tabela tymczasowa
zietek
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `root`.`proc1` $$
  4. CREATE DEFINER = `root` @ `localhost` PROCEDURE `proc1`()
  5. BEGIN CREATE TEMPORARY TABLE temp (
  6. `imie` VARCHAR(45),
  7. `nazwisko` VARCHAR(45)
  8. );
  9.  
  10. INSERT INTO temp (imie, nazwisko) (SELECT imie, nazwisko FROM `osoby`);
  11.  
  12. /* tu pewne operacje na tabeli temp */
  13.  
  14. SELECT * FROM temp; DROP TABLE temp;
  15. END $$
  16.  
  17. DELIMITER;


W procedurze skladowanej tworze tymczasowa tabele, do ktorej wrzucam dane z tabeli 'osoby'. Nastepnie wykonuje pewne operacje na tabeli tymczasowej (ktore tu pominalem w celu nie zaciemniana skryptu) i zwracam obrobione dane przy pomocy select.

Pytanie: czy wielokrotne wywolanie tej procedury w tym samym czasie nie spowoduje jednoczesnej pracy na tej samej tabeli temp, co spowoduje blad albo przeklamania w danych? W bazach MS SQL korzystalem ze zmiennej typu table (cos jak ponizej). Niestety w MySQL to nie dziala, albo coz zle robie....

  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `root`.`proc1` $$
  4. CREATE DEFINER = `root` @ `localhost` PROCEDURE `proc1`()
  5. BEGIN DECLARE temp TABLE(imie VARCHAR(45), nazwisko VARCHAR(45));
  6.  
  7. INSERT INTO temp (imie, nazwisko) (SELECT imie, nazwisko FROM `osoby`);
  8.  
  9. /* tu pewne operacje na tabeli temp */
  10.  
  11. SELECT * FROM temp; END $$
  12.  
  13. DELIMITER;


Jak rozwiazac ten problem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
webdice
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Wydaję mi się że będzie operował na tej samej tabeli, ale nie jestem do końca przekonany. Najlepiej utwórz tabelę z dużą ilością danych, uruchom dwa razy skrypt i będziesz widział. Rozwiązaniem może być też:

  1. LOCK TABLES `temp` WRITE
Go to the top of the page
+Quote Post
prond
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Tabele tymczasowe na pewno nie są dzielone pomiędzy poszczególnymi sesjami połączenia z bazą danych.
Korzystałem z tego wielokrotnie. Ponadto możesz naturalnie utworzyć tabelę tymczasową o tej samej nazwie co istniejąca tabela.
Tabela tymczasowa 'przykryje' wtedy normalną tabelę - tak jakbyś w bazie danych ze schematami ustawił kolejność schematów, z których wybierane są tabele i inne obiekty.
Go to the top of the page
+Quote Post
zietek
post
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 25.12.2007

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


To jeszcze sie spytam, czy tabele tymczasowa nalezy na koncu DROPowac czy sama ulega skasowaniu na koncu sesji ?
Go to the top of the page
+Quote Post
prond
post
Post #5





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Sama ulega dropowaniu.
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: 23.08.2025 - 14:00