在MySql Workbench中测试存储过程

EB.*_*EB. 7 mysql testing stored-procedures insert mysql-workbench

我有一个Insert存储过程,我将其插入到2个表中.第二个表使用第一个表的Last_Insert_ID.这是我的特色:

    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
Run Code Online (Sandbox Code Playgroud)

以下是我在MySql工作台中测试查询的方法:

call new_user_create(@myFarm, @MyName, @MyAddress, @MyCity, @MyState, @MyZip, @MyCountry)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:"列Address1不能为空"

我要去哪里?它在sproc中吗?还是我打电话的方式?

Rav*_*ddy 9

" 列地址1不能为空 "表示intelliair.address.Address1必须定义该字段not null.

并且,@MyAddress在将其传递给存储过程之前,我认为您没有预先定义的值.
除非定义它被视为NULL,因此抛出错误.

在调用存储过程之前交叉检查值,如:

select @MyAddress;  -- ,@myFarm, @MyName, @MyCity, @MyState, @MyZip, @MyCountry;
Run Code Online (Sandbox Code Playgroud)

更新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
);
Run Code Online (Sandbox Code Playgroud)