Использование переменной Postgresql при выполнении с использованием не возвращает результатов

#sql #postgresql #dynamic #execute

Вопрос:

Использование переменной в предложении «выполнить с помощью» возвращает приведенную ниже ошибку

 SQL Error [42P02]: ERROR: there is no parameter $2 Where: PL/pgSQL function inline_code_block line 27 at EXECUTE  

Использование предложения с переменной, содержащей список значений для более чем одной переменной привязки, как показано ниже в коде, приводит к вышеуказанной ошибке.

 do $  declare  lv_sql_stmt character varying;  lv_name character varying;  lv_id character varying; lv_using_str character varying; lv_in1 character varying; lv_in2 character varying;  begin   lv_in1 := 'HOP510002';  lv_in2 := 'JohnKing';   lv_sql_stmt := 'select $1, $2 from emp where emp_id=$1'; lv_using_str := format ('%s,%s',quote_nullable(lv_in1),quote_nullable(lv_in2));  raise notice 'sql %', lv_sql_stmt;  raise notice 'lv_using_str: %', lv_using_str; --case1  execute lv_sql_stmt into lv_id, lv_name using 'HOP510002','JohnKing';  raise notice 'lv_name1: %', lv_name;  raise notice 'lv_id1: %', lv_id;   --case2  execute lv_sql_stmt into lv_id, lv_name using lv_in1, lv_in2;  raise notice 'lv_name2: %', lv_name;  raise notice 'lv_id2: %', lv_id;   --case3  execute format (lv_sql_stmt ) using lv_using_str;  raise notice 'lv_name3: %', lv_name;  raise notice 'lv_id3: %', lv_id;    end;  $  

Первые два «выполнить с использованием» возвращают результаты, как и ожидалось. Но последний(случай 3), который использует переменную для списка значений в предложении USING, возвращает указанную выше ошибку.

Мы очень ценим любую помощь. Спасибо!