通过postgres函数的sql查询结果为null

时间:2019-01-03 03:46:23

标签: postgresql psql

我正在运行一个具有参数的函数: -要显示的列名 -执行搜索的列名 -我们正在寻找的价值

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 :(得分:0)

您需要的是动态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的存储过程,希望在您的情况下可以接受
  • 通过绑定变量使用的值(通过 $ 1 传递的 myvalue 参数值)
  • 出于安全原因使用了quote_ident()函数
  • documentation 中的更多信息