Как ссылаться на имена полей с помощью переменной в хранимой процедуре Firebird или в блоке выполнения - PullRequest
1 голос
/ 11 октября 2011

Пожалуйста, дайте мне пример, как ссылаться на имена полей с переменной в хранимой процедуре Firebird или execute block

Примерно так: псевдо SQL:

Insert into tab1 (1, f1, f2, f3)
    select 1, tab2.f+var_loop, tab2.f+var_loop, tab2.f+var_loop
    from tab2
    where .....

где "f"первый инициал имени поля и «var_loop» является переменной цикла

1 Ответ

1 голос
/ 11 октября 2011

Мне все еще не совсем ясно, чего вы хотите достичь, но в PSQL также имеется функция ВЫПОЛНИТЬ ЗАЯВЛЕНИЕ , которая может удовлетворить ваши потребности - она ​​позволяет вам создать строку и затем выполнить ее как оператор DSQL ... Предполагая, что var_loop в вашем примере является целым числом, ваш код может быть что-то вроде

CREATE PROCEDURE Foo(var_loop INTEGER)
AS
DECLARE Stmnt VARCHAR(1024);
BEGIN
  Stmnt = 'Insert into tab1 (1, f1, f2, f3)'||
          'select 1, tab2.f'|| CAST(var_loop AS VARCHAR(10)) ||
          ', tab2.f'|| CAST(var_loop AS VARCHAR(10)) ||
          ', tab2.f'|| CAST(var_loop AS VARCHAR(10)) ||
          'from tab2 where(...)';
  EXECUTE STATEMENT Stmnt;
END^
...