gpt4 book ai didi

firebird - 如何设置初始发电机值?

转载 作者:行者123 更新时间:2023-12-05 08:59:15 24 4
gpt4 key购买 nike

我需要将新的 Firebird 生成器/序列初始化为现有“旧”表的最大主键值。我尝试了以下但它不起作用,我收到错误“ token 未知 - 第 6 行,第 8 列选择”。我不能手动执行此操作,因为它必须在许多不同的数据库上执行。我正在使用 Firebird 2.5.1。

根据 http://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/langrefupd25-execblock.html这应该有效-我做错了什么?

set term #;  
execute block
as
declare i int = 0;
begin
i = select max(ID) from OrganizationType_OLU;
alter sequence OrganizationType_OLU restart with :i;
end
#
set term ;#

最佳答案

一般来说你可以使用ALTER SEQUENCE :

ALTER SEQUENCE sequence-name RESTART WITH <newval>

或遗留选项 SET GENERATOR

SET GENERATOR generator-name TO <new-value>

但是你想从 EXECUTE BLOCK 执行此操作,但你不能这样做,因为在 Firebird 中不允许从 PSQL 代码执行 DDL。所以我猜 answer of rstrelba可能是唯一可用的选项。

请注意,尽管序列在 Firebird 中不受事务控制(它们是原子的),因此请确保仅在您是唯一事件事务时才运行它,否则您可能会将序列重置为无效值。

我强烈建议确保 OrganizationType_OLUID 始终按顺序生成,并且绝不允许用户为这些列指定值。这确保了序列值始终有效(即:不会太低,导致违反主键约束)。

关于firebird - 如何设置初始发电机值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com