Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Procedury, triggery w MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
prond
Mam problem z procedurami w MySQL. Chciałbym utworzyć jedną uniwersalną procedurę "dia_saveNode", ale MySQL nie pozwala mi stworzyć dwóch procedur o takiej samej nazwie, ale z innymi parametrami :

  1. CREATE PROCEDURE dia_saveNode (
  2. IN p_id int(11),
  3. IN p_parent_id int(11),
  4. IN p_name varchar(255)
  5. )
  6. BEGIN -- CODE
  7. END &
  8.  
  9.  
  10. CREATE PROCEDURE dia_saveNode (
  11. IN p_id int(11),
  12. IN p_parent_id int(11),
  13. IN p_name varchar(255),
  14. IN p_path varchar(255),
  15. IN p_depth int(4),
  16. IN p_weight int(4)
  17. )
  18. BEGIN -- CODE
  19. END &


Komunikat : PROCEDURE dia_saveNode already exists


Próbowałem to obejść w taki sposób, że stworzyłem trigger'a, ale tu też mam problem ponieważ:
pomimo przypięcia triggera do akcje BEFORE INSERT MySQL nie pozwala mi opuścić w klauzuli INSERT INTO ... kolumn, dla których nie ma wartości domyślnej i są NOT NULL.

Macie może jakiś pomysł jak to obejść ?

Alternatywą dla tego rozwiązania jest naturalnie zrobienie kilku procedur.

Docelowo procedura ma być wywoływana z CakePHP, który w modelu mam jedną funkcję metodę save i chciałem zrobić dokładne odwzorowanie.
Indeo
Słuchaj a nie można wewnątrz procedury sprawdzić przekazanych argumentów i w zależności od ich wartości wykonać odpowiedni blok kodu?

Nie znam się na procedurach bo w zasadzie korzystam tylko z triggerów i funkcji ale pewnie można użyć wewnątrz kodu procedury instrukcji warunkowej odpowiadającej za wykonanie odpowiedniego polecenia.
Może nawet z wnętrza procedury możesz wywołać inne procedury lub funkcje wtedy rola tej procedury mogłaby sie ograniczać wyłącznie do rozpoznania parametrów wyjściowych.

Taki controller dla SQL'a smile.gif

Coś jak np:
masz dwie funckcje: func_a() i func_b();

i warunek w procedurze przyjmującej kilka parametrów wejściowych param1,param2,param3:
select if(param2 is not null,func_a(param2),func_b(param1));

smile.gif
prond
W zasadzie niegłupi pomysł, ale mierzi mnie na samą myśl, że będę to musiał robić pod MySQL winksmiley.jpg
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.