tibscript和局部变量

oxcyiej7  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(355)

我正在使用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块构造中的变量上。存储过程和触发器定义中的局部变量没有问题。

5sxhfpxr

5sxhfpxr1#

执行方法后 TIBSQL.PreprocessSQL (unit ibx.ibsql第2362行),前面标有“:”的参数替换为“?”。所以应该使用不带“:”的参数。我也认为它应该被移除 SET TERM . 相反,要设置终止符值,请使用 IBScript.Terminator 财产。
p、 我在delphi10.3rio中观看了单元ibx.ibsql。

EXECUTE BLOCK AS
  DECLARE test_variable INT;
BEGIN
  SELECT tt.id FROM USERS tt WHERE (tt.fname LIKE 'abc%') INTO test_variable;
END;

正确执行时

IBScript.Terminator = ^;

编辑:
你不能执行 INSERT 参数在 EXECUTE BLOCK 使用脚本组件。
正如马克·罗特维尔所说:
不幸的是,移除结肠只是手术中的一个选择 into 子句中不包含其他局部变量或参数。

相关问题