我知道下面的代码可以工作,并分配在数据库属性中建立的默认值。我的问题现在是如何在存储过程中使用它,并在输入NULL的情况下在数据库结构中分配默认值。 当前正在使用MariaDB。
这有效:
insert into userclients (UserTypeID, UserName, UserPassword, UserEmail, UserBirthDate, UserFavouriteCategory)
values (1, 'Daniel', 'DanielPassword', 'daniel@test.com', '1999-01-01', default);
有关列的定义:
UserFavouriteCategory varchar(100) not null default "All",
现在我想做类似的事情:
DELIMITER $$
CREATE PROCEDURE INSERT_USERCLIENT2(UserTypeIDInput int,UserNameInput varchar(100), UserPasswordInput varchar(100), UserEmailInput varchar(100), UserBirthDateInput date, UserFavouriteCategoryInput varchar(100) )
begin
insert into userclients (UserTypeID, UserName, UserPassword, UserEmail, UserBirthDate, UserFavouriteCategory)
values (UserTypeIDInput, UserNameInput, UserPasswordInput, UserEmailInput, UserBirthDateInput, IFNULL(UserFavouriteCategoryInput, default) );
END $$
DELIMITER ;
DELIMITER $$
这有可能吗?实际上,在相同情况下我有2个字段,我想避免嵌套的IF或倍数存储过程。
答案 0 :(得分:1)
默认关键字似乎有问题,您可以尝试传递列的完整标识符名称,这是一个示例:
create table test.test_table(
id int,
txt varchar(30) default 'This is the default!!'
);
-- Insert the default value
insert into test.test_table values(1,default);
-- Some value
insert into test.test_table values(1,ifnull('A Value',test.test_table.txt) );
-- If null, insert the default value
insert into test.test_table values(1,ifnull(null,test.test_table.txt) );
select *
from test.test_table;