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

SSt*_*tev 2 sql delphi firebird stored-procedures

我想创建存储过程来获取特定表的当前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
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法将输入参数传递给gen_id,或者我必须为每个表创建不同的sp ..

提前致谢

Ond*_*lle 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 ;^
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望它是可选择的存储过程,您只需要`SUSPEND`. (4认同)