我运行以下存储过程:
我被重定向到“结果”标签,什么也没看到。然后,如果我单击“刷新”图标(在“结果”选项卡下面),则出现对话框:
SQLCODE = -625列ID的验证错误,值“ *空* ”
当然,什么也没添加...
据我了解,firebird期望RC_ID的某个值(这是我的PK,应主要自动递增)。如果我也为RC_ID赋值,则效果很好。
那么,我该怎么做才能清楚地“插入”这些错误?
答案 0 :(得分:1)
问题是您没有为主键设置值。与您的期望相反,主键不会自动增加。我知道的任何数据库都是这种情况。尽管某些工具(表构建器)可能已默认将其标记为身份,自动递增或已生成,或通过其他方式获得该行为,但您始终需要将其标记为身份。
如果您使用的是Firebird 3,则可以将列定义为GENERATED BY DEFAULT AS IDENTITY
(请参阅Firebird 3发行说明中的Identity Column Type)。对于早期的Firebird版本,最好的方法是使用一个填充主键列的插入前触发器定义一个序列(也称为生成器)。
有关如何定义标识列(或定义触发器)的更多详细信息,请参见我对以下问题的回答:Easiest way to create an auto increment field in Firebird database。
答案 1 :(得分:0)
在firebird中,自动增量无法像在MySQL中那样工作。因此,必须发送RC_ID的值...
我发现了一些基于想法的工作示例:
:
begin
insert into RESERVATIONCATEGORY (RC_ID, RC_NAAM)
values (
GEN_ID(GEN_RESERVATIONCATEGORY _ID,1), 'selam'
);
suspend;
end