1

我使用 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 的部分是可以的:

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

但我ID首先需要在其他表中进行依赖。

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

4

2 回答 2

2

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

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

EB 允许输入参数、输出参数(是的,您可以将其用作表格)、局部变量、if 语句、while、for select 等......非常强大的工具。

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

于 2012-07-20T13:54:12.820 回答
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)
于 2012-07-23T08:14:37.047 回答