Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Procedury w MySQL ?
Forum PHP.pl > Forum > Bazy danych > MySQL
Black-Berry
Kiedyś chodziłem na kurs Oracle. Tam nas uczyli, że za pomocą oracla można tworzyć procedury. Niestety to było dawno i nie pamiętam jak to było a jakoś nie mogę się doszukać? Jest takie coś możliwe za pomocą mySQL?

Jeśli tak to jak przekształcić poniższą procedurę php na zapytanie mySQL ?
  1. <?php
  2. $query = "SELECT * FROM mytable ORDER BY succession";
  3. $result = mysql_query ( $query ) or die ( _SQL_ERROR_ . mysql_error() );
  4. $c = 0;
  5. while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  6. {
  7. $c = $c + 1;
  8. mysql_query( "UPDATE mytable SET succession = " .$c. " WHERE id = ".$row["id"]."" );
  9. }
  10. ?>
Serdecznie prosze o pomoc.
wijet
Mysle ze duzo sie nie rozminolem z tym co chciales osiagnac,dopiero wstalem.
  1. delimiter //
  2. CREATE PROCEDURE zwieksz ()
  3. BEGIN DECLARE c INT;
  4. DECLARE last INT;
  5. DECLARE row_id INT;
  6. DECLARE k CURSOR FOR SELECT id FROM mytable ORDER BY succession;
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET last=1;
  8. SET c = 0;
  9. SET last = 0;
  10. OPEN k;
  11. k_loop: LOOP
  12. SET c = c + 1;
  13. FETCH k INTO row_id; IF last = 1 THEN
  14. LEAVE k_loop;
  15. ELSE
  16. UPDATE mytable SET succession = c WHERE id = row_id;
  17. END IF;
  18. END LOOP k_loop;
  19. CLOSE k;
  20. END;
  21. //
c3zi
Tak sobie mysle, po co pobierasz najpierw wszystkie wpisy wg succession, a potem i tak succession ustawiasz od 0?
Black-Berry
@wijet Dzięki wielkie za kod ale nie wiem czemu wyskakuje mi coś takiego
Kod
SQLERROR: Something is wrong in your syntax obok 'delimiter // CREATE PROCEDURE zwieksz () ' w linii 1

Czy to znaczy że mój silnik SQL nie obsługuje tego? Czy może zle to podpiąłem przez php. kod który wysłałeeś zapakowałem do zmiennej $sort_query i wywołałem tak:
  1. <?php
  2. mysql_query ( $sort_query ) or die ( _SQL_ERROR_ . mysql_error());
  3. ?>
Nie wiem czy dobrze myślę. Mam raczej niewielkie doświadczenie w bazach danych.

@c3zi Moja tabela zawiera wartosci zmiennoprzecinkowe w polu succession. Biorą się one stąd, że kiedy dodaję nowy wpis pomiędzy dwa istniejące ustalam jego kolejność jako liczbę z przedziału pomiędzy nimi. Teraz kiedy posortuję te wpisy liczbami naturalnymi mam pewność, że jeśli dodam jakiś nowy wpis to będę miał wszystko poukładane. Dzięki temu mam bardzo fajnie wszystko poukładane w bazie i później wyświetlając tabelę która zawiera pole z kolejnością nie muszę już tych danych obrabiać tak żeby były ponumerowane.
wijet
Sprobuj pominąć w tym zapytaniu 'delimiter //' na początku i '//' na końcu, co do silnika to oczywiście musisz mieć mysql 5.x
Black-Berry
Cytat(wijet @ 30.06.2007, 14:04:44 ) *
Sprobuj pominąć w tym zapytaniu 'delimiter //' na początku i '//' na końcu, co do silnika to oczywiście musisz mieć mysql 5.x

Chyba jednak mam versje 3.8 (tak gdzieś własnie wyczytałem). To chyba mnie to nie urządza bo chcę miec maksymalnie przenośny system, a skoro nie pójdzie na niektórych wersjach mySQL'q to chyba lepiej jak zostanę przy starej wersji mojej procedury (właściwie to nie muli ona aż tak bardzo).

Dzięki wielkie za pomoc. Wątek zostanie dla potomnych smile.gif
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.