Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Z MSSQL do MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
Grzesiek23
Witam!

Wyczytałem, iż MySQL - podobnie jak MSSQL - pozwala na stosowanie procedur i funkcji. Wszystko jest ok, tworzę i wywołuję procedurę/funkcję.

Jednak ani w phpMyAdmin ani w żadnym innym sofcie, który pozwala na zarządzanie MySQL nie mogę ani "zobaczyć" procedur/funkcji ani ich zmodyfikować. To normalne? W MSSQL Management miałem takie możliwości, czyżby tutaj to było nieosiągalne i za każdym razem muszę usuwać i tworzyć na nowo procedury/funkcje?


A teraz problem przy przejściu jaki napotykam:
  1. -- Check valid ForumID
  2. IF @ForumID IS NOT NULL AND NOT EXISTS(SELECT 1 FROM [dbo].[yaf_Forum] WHERE ForumID=@ForumID) begin
  3. SET @ForumID = NULL
  4. end


Czy ktoś byłby na tyle miły i pokazałby mi jak to ma wyglądać w MySQL? Kombinowałem dosyć długo i za każdym razem pupa zbita :/

Dziękuję.
Noidea
W MySQL Workbench procedury i funkcje znajdują się w Routines w Object Browserze.

A co do IFa:
http://www.bennadel.com/blog/1340-MySQL-Do...L-Work-Flow.htm

+ drobne różnice w składni:
  1. IF @ForumID IS NOT NULL AND NOT EXISTS (SELECT 1 FROM tabela WHERE ForumID = @ForumID) THEN
  2. SET @ForumID = NULL;
  3. END IF;
Grzesiek23
Kombinuję i nadal wywala błąd. Pytanie czy to zapytanie mogę wykonać normalnie w konsolce czy muszę wrzucić do procedury/funkcji.


  1. IF NOT EXISTS (SELECT 1 FROM jos_users WHERE id= 1) THEN
  2. SELECT * FROM jos_menu;
  3. END IF;


Ahhh, ok. Przeczytałem, już jasne smile.gif

Jeszcze jakby ktoś pomógł z tym kawałkiem kodu:


  1. SELECT
  2. @CategoryID = c.CategoryID,
  3. @ForumID = b.ForumID,
  4. @TopicID = b.TopicID
  5. FROM
  6. [dbo].[yaf_Message] a
  7. INNER JOIN [dbo].[yaf_Topic] b ON b.TopicID = a.TopicID
  8. INNER JOIN [dbo].[yaf_Forum] c ON c.ForumID = b.ForumID
  9. INNER JOIN [dbo].[yaf_Category] d ON d.CategoryID = c.CategoryID
  10. WHERE
  11. a.MessageID = @MessageID AND
  12. d.BoardID = @BoardID


to będzie super. Kombinowałem z SET na różne sposoby i niestety nie trybi w MySQL sad.gif
Noidea
Znak równości jest tu traktowany jak porównanie. Przypisanie wygląda tak jak w pascalu :=

  1. SET @var = 1;
  2. SET @var2 = NULL;
  3. SELECT @var = 1234, @var = 1, @var < 2, @var > 1,
  4. @var2 = 0, @var2 < 2, @var2 = NULL, @var2 IS NULL,
  5. @var := 1, @var := 1234

Kod
0    1    1    0    NULL    NULL    NULL    1    1    1234
Grzesiek23
Dzięki!

A mógłbyś mi jeszcze wytłumaczyć czym się różni DECLARE zmienna (później przypisywania SET zmienna = ... ) od bezpośredniego użycia SET @zmienna = ... ? Co ta "małpka" nam daje? smile.gif
Grzesiek23
Dzięki ponownie.

Czyli w przypadku posługiwania się zmiennymi sesyjnymi, powinienem na początku procedury przypisać im wartość domyślą tak, aby nie została użyta wcześniejsza wartość (trochę tak na chłopsko napisane wink.gif )?

Ostatnie zmolne pytanie smile.gif

Mam takie zapytanko:
  1. SELECT @CategoryID:= parent.ID, @ArticledID:= node.ID FROM table1 AS node, table2 AS parent, table3 table3
  2. WHERE node.lft BETWEEN parent.lft AND parent.rgt AND parent.type= 0 AND table3.ID = in_TopicID AND table3.articledID = node.articledID
  3. ORDER BY parent.lft;



Czy można w jakiś sposób zrobić tak, aby przypisać do tych zmiennych odpowiednie wartości, ale bez użycia SELECTu?

W procedurze kawałek później robię select, który potrzebuję. Niestety teraz otrzymuję select z przypisania zmiennym wartości.
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.