2015-10-12 2 views
0

Я создал хранимую процедуру, которая должна выполнить следующее: вставить в агентстве таблицу, создавая идентификатор в индексе PK строках Сохранить идентификатор в переменной вставить идентификатор и другие данные, в таблице UsersMySQL вставка запросы в хранимой процедуре не Вставка

синтаксис ниже не вызывает каких-либо ошибок:

DELIMITER $$ 

CREATE PROCEDURE insertNewAgencyAndAdmin (IN aName varchar (100), IN numTrav int, IN polType int, IN uEmail varchar(255), IN uFName varchar(40), IN uLName varchar(40), IN uTitle varchar(100)) 
BEGIN 

INSERT INTO btsAgency.Agencies (agencyName, numTrav, polType) VALUES (@aName, @numTrav, @polType); 

SET @agencyID = (SELECT agencyID from btsAgency.Agencies where agencyID = LAST_INSERT_ID()); 

INSERT INTO btsUsers.Users (userAgencyID, userEmail, userFirstName, userLastName, userTitle) VALUES 
(@agencyID, @uEmail, @uFName, @uLName, @uTitle); 

END 

Однако ХП не вставляет свои параметры в таблицы при выполнении. Таким образом, после поиска я пытаюсь создать СП, как это (в том числе $$ после «END» и сбросить разделитель запятой):

DELIMITER $$ 

CREATE PROCEDURE insertNewAgencyAndAdmin (IN aName varchar (100), IN numTrav int, IN polType int, IN uEmail varchar(255), IN uFName varchar(40), IN uLName varchar(40), IN uTitle varchar(100)) 
BEGIN 

INSERT INTO btsAgency.Agencies (agencyName, numTrav, polType) VALUES (@aName, @numTrav, @polType); 

SET @agencyID = (SELECT agencyID from btsAgency.Agencies where agencyID = LAST_INSERT_ID()); 

INSERT INTO btsUsers.Users (userAgencyID, userEmail, userFirstName, userLastName, userTitle) VALUES 
(@agencyID, @uEmail, @uFName, @uLName, @uTitle); 

END $$ 
DELIMITER ; 

MySql создает ХП, но дает мне следующее сообщение об ошибке:

1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «DELIMITER» в строке 1

Когда я выполняю созданный Stored Proc, он по-прежнему не вставляет данные в мои параметры.

Любая помощь будет оценена по достоинству.

+0

Вы используете phpmyadmin? – Mihai

ответ

0

Некоторые проблемы в хранимой процедуре:

  • Важно указать разницу между 9.4. User-Defined Variables и рутинных параметров 13.1.15. CREATE PROCEDURE and CREATE FUNCTION Syntax, различные переменные (например .: aName = @aName!).

  • Избегайте присвоения имен параметрам или переменным в качестве столбцов ваших таблиц.

DELIMITER $$ 

CREATE PROCEDURE `insertNewAgencyAndAdmin` (
    /*  
    IN `aName` varchar (100), 
    IN `numTrav` int, 
    IN `polType` int, 
    IN `uEmail` varchar(255), 
    IN `uFName` varchar(40), 
    IN `uLName` varchar(40), 
    IN `uTitle` varchar(100) 
    */ 
    IN `_aName` varchar (100), 
    IN `_numTrav` int, 
    IN `_polType` int, 
    IN `_uEmail` varchar(255), 
    IN `_uFName` varchar(40), 
    IN `_uLName` varchar(40), 
    IN `_uTitle` varchar(100) 
) 
BEGIN 
    /* 
    INSERT INTO `btsAgency`.`Agencies` (
    `agencyName`, 
    `numTrav`, 
    `polType` 
) VALUES (
    @`aName`, 
    @`numTrav`, 
    @`polType` 
); 
    */  
    INSERT INTO `btsAgency`.`Agencies` (
    `agencyName`, 
    `numTrav`, 
    `polType` 
) VALUES (
    `_aName`, 
    `_numTrav`, 
    `_polType` 
);  
    /* 
    SET @`agencyID` = (SELECT `agencyID` from `btsAgency`.`Agencies` where `agencyID` = LAST_INSERT_ID()); 

    INSERT INTO `btsUsers`.`Users` (
    `userAgencyID`, 
    `userEmail`, 
    `userFirstName`, 
    `userLastName`, 
    `userTitle` 
) VALUES (
    @`agencyID`, 
    @`uEmail`, 
    @`uFName`, 
    @`uLName`, 
    @`uTitle` 
); 
    */  
    INSERT INTO `btsUsers`.`Users` (
    `userAgencyID`, 
    `userEmail`, 
    `userFirstName`, 
    `userLastName`, 
    `userTitle` 
) VALUES (
    LAST_INSERT_ID(), 
    `_uEmail`, 
    `_uFName`, 
    `_uLName`, 
    `_uTitle`); 
END$$ 

DELIMITER ; 
+0

Это было! Благодаря! –

0

SELECT * FROM сКиДКи $$ разделителем $$; CREATE PROCEDURE insertData (Идентификационный номер INT, в заголовке VARCHAR (255), в сумме десятичной) НАЧАТЬ

вставки в значениях скидки (идентификатор, название, сумма); END; $$ call insertData (3, "sadasd", 56);

/* DROP PROCEDURE insertData */

Смежные вопросы