我正在使用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执行此操作?
答案 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)