gpt4 book ai didi

firebird - 如何在 Firebird 的客户端 DML 脚本中声明/使用局部变量

转载 作者:行者123 更新时间:2023-12-02 21:54:55 24 4
gpt4 key购买 nike

我是 Firebird DML 新手。

在 TransactSQL 中,我可以自由且简单地声明和使用变量,如下所示

declare @myID int

select @myID = 42

并在 SELECT 语句中使用这些变量

select * from mytable where id = @myID

并在不同语句之间传递值。

我的问题很简单,如何在客户端 Firebird DML 脚本中声明和使用局部变量?

使用 FlameRobin,我可以一次性执行一系列 DML 语句,例如

update mytable set price = 2 * price;
select * from mytable;

但我完全不知道如何声明和使用局部变量在它们之间传递值。

谷歌搜索,我发现了 Firebird 的 PSql 的 EXECUTE BLOCK 构造,它显然支持 DECLARE VARIABLE,但它看起来很麻烦,似乎包含一些我在 TransactSQL 中从未遇到过的奇怪限制,而且似乎并不旨在用于我正在尝试执行的客户端 DML 脚本类型。

最佳答案

过去几天我一直在努力解决这个问题,试图完成对这个问题的回答:sql and fifo simple select ;我花了大约半个小时来编写和测试 TransactSQL 方法来执行 OP 的要求。

我本来会选择向您建议的EXECUTE BLOCK路线,但我一直遇到DML事情,这些事情显然是不允许的,所以我放弃了政治正确的做法方式。

因此,我采用了一种可能会让 Firebird 纯粹主义者大吃一惊的方式:与其尝试声明变量,只需创建一个临时表,其中包含与您将使用的变量相对应的列,以及一个 ID 以便于轻松地声明变量。从中提取值,然后将变量的值存储在其中的一行中。像这样的东西:

create table variables(ID int, myID int, myStringVar charchar(80), [etc...])

显然,您可以根据需要初始化此表,并随时更新列值。访问其中的值比访问变量的值要麻烦一些,但也不是太多,如

update mytable set somecolumn = 666 where id = (select myID from variables where ID = 1)

我相信您已经明白了。我发现以这种方式做事唯一的小烦恼,而且说实话,我不确定它是 Firebird 的东西还是 FlameRobin 的东西是,似乎有必要将数据库对象(如表和 View )的创建包装在一个事务中,该事务可以得到在尝试使用它们的语句 block 之前提交。

关于firebird - 如何在 Firebird 的客户端 DML 脚本中声明/使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com