在Postgresql中使用变量进行SQL查询

时间:2013-07-30 08:28:54

标签: sql postgresql plpgsql

我有一个SQL查询

SELECT c,d FROM tableX where a='str' AND b=var1 ;

我想用变量替换var1。我试着用plpgsql。

CREATE OR REPLACE FUNCTION foo (var1 integer) 
RETURNS TABLE (c integer, d varchar)  AS
$BODY$
DECLARE 
 aa varchar = 'str';
BEGIN    
RETURN QUERY EXECUTE 
'SELECT c,d FROM tableX where a=aa AND b=@1' using var1;
END;
$BODY$
LANGUAGE plpgsql;

错误是

No operator matches the given name and argument type(s). You might need to add explicit type casts.

3 个答案:

答案 0 :(得分:3)

首先 - 指定参数的正确方法是$1,而不是@1

第二 - 您不需要动态sql将参数传递给查询。只需写下:

CREATE OR REPLACE FUNCTION foo (var1 integer) 
RETURNS TABLE (c integer, d varchar)  AS
$BODY$
DECLARE 
 aa varchar = 'str';
BEGIN    
 RETURN QUERY SELECT c,d FROM tableX where a=aa AND b=var1;
END;
$BODY$
LANGUAGE plpgsql;

答案 1 :(得分:2)

只是在PostgreSQL中练习,如a_horse_with_no_name所说,可以在普通的SQL中编写函数,这是我的尝试:

CREATE FUNCTION foo1 (var1 integer) RETURNS TABLE(c int, d text) 
    AS $$ SELECT c,d FROM tableX where a='str' AND b=$1 $$
    LANGUAGE SQL;

SQL FIDDLE EXAMPLE

答案 2 :(得分:1)

试试吧:

CREATE OR REPLACE FUNCTION foo (var1 integer) 
  RETURNS TABLE (c integer, d varchar)  AS
$BODY$
DECLARE 
  aa varchar = 'str';
BEGIN    
RETURN QUERY 
  SELECT c,d FROM tableX where a=aa AND b=var1;
END;