Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] procedura skladowana, tabela tymczasowa
zietek
post 28.12.2007, 21:20:43
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
webdice
post 28.12.2007, 21:39:54
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 28.12.2007, 21:46:39
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.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post
zietek
post 28.12.2007, 22:03:44
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 28.12.2007, 22:09:26
Post #5





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

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


Sama ulega dropowaniu.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
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: 1.05.2025 - 06:09