Результат запроса sql null через функцию postgres - PullRequest
0 голосов
/ 03 января 2019

Я запускаю функцию с параметрами: - имя столбца для отображения - имя столбца, по которому выполняется поиск - значение, которое мы ищем

CREATE FUNCTION myFunction (column_1 varchar, column_2 varchar, 
myvalue varchar) returns varchar as $$
select distinct $1 from mytable where $2 = $3;
$$ language 'sql';

Результат всегда NULL. Я пытался выбрать INTO, RETURN ... и т. Д., Но у меня все еще есть нулевой ответ

Я попробовал пару синтаксисов без успеха. Любая помощь с благодарностью: -)

1 Ответ

0 голосов
/ 03 января 2019

Динамический SQL - это то, что вам нужно.

/* EXAMPLE PREPARATION */
drop table if exists mytable; 
create table mytable( a text, b text ); 
insert into mytable values ( 'aa', 'bb' ); 

select * from mytable; 
a  | b  
----+----
aa | bb
(1 row)

/* CREATE FUNCTION */
create or replace function myFunction (
  column_1 varchar, 
  column_2 varchar, 
  myvalue varchar) 
returns varchar 
as $$
declare
  r1 text;
begin
  execute 'select '|| quote_ident(column_1) || ' from mytable where '|| 
      quote_ident(column_2) || ' = $1'
    into r1
    using myvalue; 
  return r1;
end;
$$ language plpgsql; 

/* EXAMPLE USAGE AND OUTPUT */
select myfunction( 'b', 'a', 'aa' ); 

myfunction 
------------
bb
(1 row)

ПРИМЕЧАНИЯ:

  • Хранимая процедура с использованием pgpsql, надеюсь, что это приемлемо в вашем случае
  • Значение, которое будет использоваться с использованием переменных связывания ( myvalue значение параметра, переданное через $ 1 )
  • Из соображений безопасности использовалась функция quote_ident ()
  • Дополнительная информация в документации
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...