我是火鸟的新手,我有很多问题.我想在从另一个表中选择的表中插入各种行.
这是代码:
/*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中包含"MyWord"的所有条目插入到MATERIAL表中,其中包含ARTCATEGORY列中的"MyWord".
我不明白为什么你需要触发器.
这个问题:
我想将包含"MyWord"的表BAS_ART中的所有条目插入到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
为列提供新的idmaterial.id