在Firebird中插入SELECT

 mobiledu2502913921 发布于 2023-02-02 21:53

我是火鸟的新手,我有很多问题.我想在从另一个表中选择的表中插入各种行.

这是代码:

/*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".

1 个回答
  • 我不明白为什么你需要触发器.

    这个问题:

    我想将包含"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

    2023-02-02 21:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有