小编典典

在Firebird中插入选择

sql

我是Firebird的新手,我遇到了很多问题。我想在从另一个表中选择的表中插入各种行。

这是代码:

/*CREATE GENERATOR POS; */
SET GENERATOR POS TO 1;

SET TERM ^;

create trigger BAS_pkassign
   for MATERIAL
active before insert position 66

EXECUTE BLOCK
AS

  declare posid bigint;
  select gen_id(POS, 1)
  from RDB$DATABASE
  into :posid;

BEGIN



END

SET TERM ; ^


INSERT INTO MATERIAL ( /*ID */ LOCATION, POSID, ARTID, ARTIDCONT, QUANTITY )
SELECT  1000, ':posid', 309, BAS_ART.ID, 1
FROM    BAS_ART
WHERE   BAS_ART.ARTCATEGORY LIKE '%MyWord%'

ID应该从66开始自动递增。posid应该从1开始自动递增。

实际上,它没有插入任何内容。

我正在使用Firebird Maestro,并且刚刚打开了SQL脚本编辑器(在执行脚本时不会抛出任何错误消息)。

有谁能够帮我?

谢谢!

附加信息:

触发器应自动增加“ ID”列-但我不知道如何精确地更改它才能起作用。。::
posid使用它:posid会引发错误,但是这样就没有错误(我想它被解释为细绳)。但是我如何正确使用它呢?

我执行它时不会出错。表格结构简单。我有2张桌子:1。

 Material (
ID (INTEGER),
Location (INTEGER),
POSID (INTEGER),
ARTID (INTEGER),
ARTIDCONT (INTEGER),
QUANTITY (INTEGER),
OTHERCOLUMN (INTEGER))

和2.其他表格

BAS_ART (ID (INTEGER), ARTCATEGORY (VARCHAR255))

->我想将表BAS_ART中所有在ARTCATEGORY列中包含“ MyWord”的条目插入到MATERIAL表中。


阅读 180

收藏
2021-04-28

共1个答案

小编典典

我不明白为什么您根本需要扳机。

这个问题:

我想将表BAS_ART中包含“ MyWord”的所有条目插入到MATERIAL表中

可以用一个insert ... select语句解决。

insert into material (id, location, posid, artid, quantity)
select next value for seq_mat_id, 1000, next value for seq_pos, id, 1
from bas_art
where artcategory = 'My Word';

假定存在第二个序列(也称为“生成器”),该序列seq_mat_id为列提供了新的ID。material.id

2021-04-28