#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, возвращает указанную выше ошибку.
Мы очень ценим любую помощь. Спасибо!