2

我想创建存储过程来获取特定表的当前 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 ..

提前致谢

4

1 回答 1

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 ;^
于 2013-10-30T19:24:26.763 回答