我有一个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.
答案 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;
答案 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;