0

我有一个 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.
4

3 回答 3

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;
于 2013-07-30T08:39:34.907 回答
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 提琴示例

于 2013-07-30T08:55:35.000 回答
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;
于 2013-07-30T08:41:22.440 回答