Sql Firebird将输入参数传递给gen_id函数

Sql Firebird将输入参数传递给gen_id函数,sql,delphi,stored-procedures,firebird,Sql,Delphi,Stored Procedures,Firebird,我想创建存储过程来获取特定表的当前id我有很多表 所以我不想为每一个都创建sp 我试着这样做,但我失败了 create procedure sp_get_id(mytable varchar(128)) returns(id integer) as begin select gen_id(:mytable, 0) from rdb$database into :id; suspend; end 我想知道是否有办法将输入参数传递给gen_id,或者我必须为每个表创建不同的sp 提前感谢如

我想创建存储过程来获取特定表的当前id我有很多表 所以我不想为每一个都创建sp

我试着这样做,但我失败了

create procedure
sp_get_id(mytable varchar(128)) returns(id integer)
as
begin
  select gen_id(:mytable, 0) from rdb$database into :id;
  suspend;
end
我想知道是否有办法将输入参数传递给gen_id,或者我必须为每个表创建不同的sp


提前感谢

如果您保持命名约定,以便可以从表名派生生成器名称,则可以使用类似于以下内容的内容:

SET TERM ^;

CREATE OR ALTER PROCEDURE SP_GET_ID (
    TABLE_NAME VARCHAR(128))
RETURNS (
    ID INTEGER)
AS
BEGIN
  EXECUTE STATEMENT 'SELECT GEN_ID(GEN_' || :TABLE_NAME || ', 0) FROM RDB$DATABASE' INTO :ID;
END^

SET TERM ;^

欢迎,很高兴为您提供帮助,但我想您忘记了在末尾添加
suspend
。如果希望它是可选择的存储过程,您只需要
suspend
。这也可以是“匿名方法”-在不定义命名存储过程的情况下执行块您还可以将生成器名称添加为参数,就像添加表名一样。