Problém s tímto:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
je, že MySQL nevidí středník na konci DROP PROCEDURE
řádek příkazu jako konec příkazu. Je to proto, že předchozí řádek řekl MySQL, že terminátor příkazu je něco jiného než středník. Řekl jste MySQL, že příkazy budou ukončeny dvěma znaky dolaru. MySQL tedy čte DROP PROCEDURE
řádek, hledá terminátor příkazu. A celý blob, který čte, NENÍ platným příkazem MySQL, generuje chybu syntaxe.
Oprava:buď přesuňte DROP PROCEDURE
řádek před DELIMITER $$
čára; nebo ukončete DROP PROCEDURE
příkaz se zadaným oddělovačem, nikoli středníkem.
Druhý problém, který uvádíte, je chyba syntaxe. K tomu dochází, protože MySQL nerozpozná IF
jako začátek platného příkazu SQL.
IF
výpis je platný pouze v kontextu programu uloženého v MySQL (například v rámci CREATE PROCEDURE
prohlášení.)
Oprava:Použijte IF
pouze v kontextu programu uloženého v MySQL.
Třetí problém, který uvádíte, je také chyba syntaxe. K tomu dochází, protože nemáte platnou syntaxi pro SET
prohlášení; Syntaxe MySQL pro SET
příkaz k přiřazení hodnoty uživatelské proměnné je:
SET @uservar = expr
MySQL očekává výraz za rovnítkem. MySQL není očekává příkaz SQL.
Chcete-li přiřadit hodnotu uživatelské proměnné jako výsledek z SELECT
proveďte přiřazení v rámci příkazu SELECT, například:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Všimněte si, že operátor přiřazení uvnitř SELECT
příkaz je :=
(dvojtečka se rovná), nejen =
.