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

时间:2013-10-30 18:51:31

标签: 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 ..

提前致谢

1 个答案:

答案 0 :(得分:5)

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

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 ;^