tibscript和局部变量

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

我正在使用Delphi7和Firebird2.0。在我的应用程序中,我使用tibscript组件。当我在脚本中使用局部变量时,问题就出现了。firebird在某些情况下要求局部变量的名称前面加冒号。这就是问题所在。应用程序停止显示错误消息:

  1. Dynamic SQL Error
  2. SQL error code = -104
  3. Token unknown - line 4, column 66
  4. ?

有问题的标记是冒号。下面是我的脚本的样子:

  1. SET TERM ^ ;
  2. EXECUTE BLOCK AS
  3. DECLARE test_variable INT;
  4. BEGIN
  5. SELECT tt.id FROM test_table tt WHERE tt.name LIKE 'abc%' INTO :test_variable;
  6. INSERT INTO test_table2(id, test_column)
  7. VALUES(1, :test_variable);
  8. INSERT INTO test_table3(id, test_column)
  9. VALUES(1, :test_variable);
  10. ...
  11. END^
  12. SET TERM ; ^

从ibexpert运行时,相同的脚本执行时没有任何错误。
如何在脚本中使用局部变量?任何帮助都将不胜感激!
我想补充一点,这个问题只发生在execute块构造中的变量上。存储过程和触发器定义中的局部变量没有问题。

5sxhfpxr

5sxhfpxr1#

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

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

正确执行时

  1. IBScript.Terminator = ^;

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

展开查看全部

相关问题