firebird数据库的问题

shijies 2011-05-31 11:36:26
如果客户端需要同时编辑主表和从表,即实际上在同一个事务中对主表和从表进行插入,可能就需要在插入数据到从表前知道主表的主键值也即从表的外键值。如果主表的主键是让系统自动赋值的,那么在这个事务中你是无法获得该主键值的,你也就无法插入相应的数据到从表。解决这种情况的一种方法就是使用选择式存储过程和生成器。首先,给主表的主键创建生成器后,不要使用触发器调用生成器让系统自动赋值,而是改用存储过程调用生成器,让该存储过程返回生成器的值,例如:
CREATE PROCEDURE GetmasterID
RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID(MasterID, 1);
SUSPEND;
END
这样,当客户端需要给主表的主键赋一个唯一值时,就调用该存储过程取得生成器的值:Select * from GetmasterID;


请问在存储过程里怎样获得生成器的值?怎么将Select * from GetmasterID得到的值赋给一个变量?
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijies 2011-06-02
  • 打赏
  • 举报
回复
给存储过程中的变量赋值,单用户,多个表共用一个主键。
kevinsem 2011-06-01
  • 打赏
  • 举报
回复
赋值是给程序中的变量还是存储过程中的变量? 是多用户吗?
kevinsem 2011-06-01
  • 打赏
  • 举报
回复
印象不深了,你查一下资料吧
记得是可以获得生成子当前值 和 下一个值的
shijies 2011-06-01
  • 打赏
  • 举报
回复
感觉这是一个执行式存储过程,而不是一个选择式的存储过程。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧