тестирование хранимой процедуры в MySQL Workbench

у меня есть хранимая процедура вставки, где я вставляю в 2 таблицы. Вторая таблица, использующая Last_Insert_ID первой таблицы. Вот мой sproc:

    DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `new_user_create`(

    IN oFarmName      varchar(45),
    IN oFirstName        varchar(45),
    IN oAddress1         varchar(45),
    IN oCity         varchar(45),
    IN oState         varchar(45),
    IN oZip         varchar(45),
    IN oCountry         varchar(45)
)
BEGIN
    insert into intelliair.individual
    ( FarmName, FirstName)
    values ( oFarmName, oFirstName);
       insert into intelliair.address
    (IndividualID, Address1, City, State, Zip, Country)
    Values (Last_Insert_ID(), oAddress1, oCity, oState, oZip, oCountry);
END

вот как я тестирую запрос в MySQL workbench:

call new_user_create(@myFarm, @MyName, @MyAddress, @MyCity, @MyState, @MyZip, @MyCountry)

там ошибка, которую я получаю: "столбец Address1 не может быть null"

где я wronng? Это в sproc? Или как я это называю?

3 ответов


"столбец Address1 не может быть null" указывает, что intelliair.address.Address1 поле должно быть определено not null.

и я не думаю, что вы заранее определенное значение для @MyAddress перед передачей в хранимую процедуру.
Если он рассматривается как NULL и, следовательно, возникает ошибка.

для перекрестной проверки значений перед вызовом хранимой процедуры, например:

select @MyAddress;  -- ,@myFarm, @MyName, @MyCity, @MyState, @MyZip, @MyCountry;

обновление 1:

вы можете назвать хранимая процедура путем прямого ввода значений для каждого из параметров.
пример:

call new_user_create(  
    'my Farm value', -- @myFarm  
    'E B', -- @MyName  
    'My Address is SO', -- @MyAddress1  
    'My City is Coders', -- @MyCity  
    'CA', -- @MyState  
    '12345', -- @MyZip  
    'US' -- @MyCountry
);

исключение создается инструкцией INSERT (или UPDATE), которая присваивает нулевое значение столбцу с именем Address1 Это объявлено NOT NULL.

наиболее вероятным объяснением из того, что вы показываете, является то, что значение, переданное в качестве параметра oAddress1, равно NULL, и исключение создается вторым оператором INSERT.

поэтому наиболее вероятным объяснением является то, что при вызове процедуры @MyAddress переменные пользователя не присвоено значение.

(вы можете проверить, отсутствует Address1 столбец на intelliair.отдельная таблица или, если она есть, она не определяется как NOT NULL.)

(существует также возможность, что это не один из ваших операторов, который бросает исключение, а скорее рекурсивный оператор SQL, например, оператор INSERT в before INSERT для каждого триггера строки.)


USE lportal;
DELIMITER $$
CREATE PROCEDURE `iemp`(IN eid INT(11),IN ename varchar(15),IN dname varchar(15),IN doj DATE)
BEGIN
INSERT INTO e_emp (eid,ename,dname,doj) VALUES (eid,ename,dname,doj);
END