Select Firebird存储过程在运行时定义表并返回值

Select Firebird存储过程在运行时定义表并返回值,select,stored-procedures,firebird,Select,Stored Procedures,Firebird,我试图在存储过程中执行一些SQL,在运行时设置表,并返回所选值: create or alter procedure TEST3 returns ( THE_VAR varchar(128)) as declare variable TABLE_NAME varchar(64); declare variable STMT varchar(128); begin /* Procedure Text */ Table_Name = 'users'; stmt = 'selec

我试图在存储过程中执行一些SQL,在运行时设置表,并返回所选值:

create or alter procedure TEST3
returns (
    THE_VAR varchar(128))
as
declare variable TABLE_NAME varchar(64);
declare variable STMT varchar(128);
begin
  /* Procedure Text */
  Table_Name = 'users';

  stmt = 'select firstname from ' || :table_name || ' where userid = 2 into :the_var';

  execute statement stmt;

  suspend;
end
它导致
令牌未知。。。。。。进入


有谁能告诉我它有什么问题吗?

您不能使用动态SQL以这种方式将值分配给存储过程上下文中的变量。这需要从
EXECUTE语句中处理。您需要将代码更改为以下内容:

stmt = 'select firstname from ' || :table_name || ' where userid = 2';
execute statement stmt into :the_var;

另请参见。

您不能使用动态SQL以这种方式将值分配给存储过程上下文中的变量。这需要从
EXECUTE语句中处理。您需要将代码更改为以下内容:

stmt = 'select firstname from ' || :table_name || ' where userid = 2';
execute statement stmt into :the_var;
另见