我正在使用Delphi7和Firebird2.0。在我的应用程序中,我使用tibscript组件。当我在脚本中使用局部变量时,问题就出现了。firebird在某些情况下要求局部变量的名称前面加冒号。这就是问题所在。应用程序停止显示错误消息:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 4, column 66
?
有问题的标记是冒号。下面是我的脚本的样子:
SET TERM ^ ;
EXECUTE BLOCK AS
DECLARE test_variable INT;
BEGIN
SELECT tt.id FROM test_table tt WHERE tt.name LIKE 'abc%' INTO :test_variable;
INSERT INTO test_table2(id, test_column)
VALUES(1, :test_variable);
INSERT INTO test_table3(id, test_column)
VALUES(1, :test_variable);
...
END^
SET TERM ; ^
从ibexpert运行时,相同的脚本执行时没有任何错误。
如何在脚本中使用局部变量?任何帮助都将不胜感激!
我想补充一点,这个问题只发生在execute块构造中的变量上。存储过程和触发器定义中的局部变量没有问题。
1条答案
按热度按时间5sxhfpxr1#
执行方法后
TIBSQL.PreprocessSQL
(unit ibx.ibsql第2362行),前面标有“:”的参数替换为“?”。所以应该使用不带“:”的参数。我也认为它应该被移除SET TERM
. 相反,要设置终止符值,请使用IBScript.Terminator
财产。p、 我在delphi10.3rio中观看了单元ibx.ibsql。
这
正确执行时
编辑:
你不能执行
INSERT
参数在EXECUTE BLOCK
使用脚本组件。正如马克·罗特维尔所说:
不幸的是,移除结肠只是手术中的一个选择
into
子句中不包含其他局部变量或参数。