我可以使用默认值在存储过程内插入吗?玛丽亚数据库

时间:2020-05-21 09:00:22

标签: stored-procedures insert mariadb

我知道下面的代码可以工作,并分配在数据库属性中建立的默认值。我的问题现在是如何在存储过程中使用它,并在输入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或倍数存储过程。

1 个答案:

答案 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;
相关问题