firebird插入返回另一个插入

时间:2012-07-20 10:13:05

标签: firebird

我正在使用Firebird作为数据库,我需要这样做:

INSERT INTO TG (ID, UID, GID) 
    SELECT (INSERT INTO TBO VALUES (GEN_ID('o',1)) RETURNING ID), UID, 10 
    FROM TBL l 
    WHERE l.is=1 

当我使用时,选择的部分是可以的:

SELECT (GEN_ID('o',1)), UID, 10 
    FROM TBL l 
    WHERE l.is=1 

但我首先需要其他表中的ID依赖。

我知道一些叫做程序的东西,但我不知道如何使用它们。是否可以使用SQL执行此操作?

2 个答案:

答案 0 :(得分:2)

查看EXECUTE BLOCK声明。它允许您在一个“批处理”中执行多个语句,或者如果无法将其嵌入到一个SQL查询中,则可以编写复杂逻辑。

在EXECUTE BLOCK内,您可以使用PSQL编写多个命令。

EB允许输入参数,输出参数(是的,你可以将它用作表),局部变量,if语句,而选择等...非常强大的工具。

只需准备你的块并像简单的SQL查询一样执行它。

答案 1 :(得分:0)

更简单的方法是使用触发器。 在这个例子中,它将是一个插入触发器。 像这样:

CREATE TRIGGER TG_BI0 FOR TABLE TG ACTIVE BEFORE INSERT 0
AS
BEGIN
    /* Before insert create a new record in TBO */
    INSERT INTO TBO (ID) VALUES (NEW.ID);
END

触发此触发后,您只需在TG中插入记录。

INSERT INTO TG (ID, UID, GID)
VALUES (GEN_ID('o',1), 'SOME_UUID', 10)