Dodanie danych do tabeli i ich modyfikacja - błąd w kodzie

0

Witam, wiem - temat nierzeczowy - ale nawet nie mam pojęcia, na czym polega mój błąd. Piszę procedurę przechowywaną, która ma za zadanie dodać nowy adres do jednej tabeli, po dodaniu zmodyfikować wiersz w drugiej tabeli tym ID, które przed chwilą dodało. Napisałem coś takiego:

CREATE PROCEDURE `ZmienAdresWysylka`(IN `Par_miasto` VARCHAR(70), IN `Par_kod` VARCHAR(6), IN `Par_ulica` VARCHAR(70), IN `Par_nrmieszkania` VARCHAR(10), IN `Par_nrdomu` VARCHAR(10), IN `Par_login` VARCHAR(30), OUT param_sp_success TINYINT)
BEGIN 
DECLARE idadres int; 
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
SET AUTOCOMMIT=0;
START TRANSACTION;
SET param_sp_success = 0;
INSERT INTO `adres`(`Miasto`, `KodPocztowy`, `Ulica`, `NrDomu`, `NrMieszkania`) VALUES (Par_miasto, Par_kod, Par_ulica, Par_nrmieszkania, Par_nrdomu); 
SET idadres = SELECT LAST_INSERT_ID(); 
UPDATE `uzytkownik` SET `IdAdresWysylka`= idadres WHERE `Login`= Par_login; 
SET param_sp_success = 1; 
COMMIT; 
END

MySql wyrzuca: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3.

Nie mam pojęcia gdzie tkwi problem - dziękuje bardzo za pomoc.

1

Spróbuj tak:

DELIMITER $$

CREATE PROCEDURE `ZmienAdresWysylka`(IN `Par_miasto` VARCHAR(70), IN `Par_kod` VARCHAR(6), IN `Par_ulica` VARCHAR(70), IN `Par_nrmieszkania` VARCHAR(10), IN `Par_nrdomu` VARCHAR(10), IN `Par_login` VARCHAR(30), OUT param_sp_success TINYINT)
BEGIN 
                DECLARE idadres INT; 
                DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
                DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
                SET AUTOCOMMIT=0;
                START TRANSACTION;
                SET param_sp_success = 0;
                INSERT INTO `adres`(`Miasto`, `KodPocztowy`, `Ulica`, `NrDomu`, `NrMieszkania`) VALUES (Par_miasto, Par_kod, Par_ulica, Par_nrmieszkania, Par_nrdomu); 
                SET idadres = (SELECT LAST_INSERT_ID()); 
                UPDATE `uzytkownik` SET `IdAdresWysylka`= idadres WHERE `Login`= Par_login; 
                SET param_sp_success = 1; 
                COMMIT; 
END$$

DELIMITER ;
  1. Brakowało DELIMITER - jest to polecenie, które zmienia aktualny "separator zapytań". Poleceniem DELIMITER $$ ustawiasz, że od teraz znak $$ będzie działał tak samo, jak dotychczas znak ;. Bez tego pierwszy średnik w Twoim kodzie kończy Twoje zapytanie i powoduje syntax error. Na końcu poleceniem DELIMITER ; przywracasz średnik jako "separator zapytań". Zwróć jeszcze uwagę, że za ostatnim END został dodany znak $$.

  2. W linii SET idadres = SELECT LAST_INSERT_ID(); brakowało nawiasów - powinno być tak: SET idadres = (SELECT LAST_INSERT_ID());

[Adam]

1 użytkowników online, w tym zalogowanych: 0, gości: 1