我想在Postgres函数中传递一个表名作为参数.我试过这段代码:
CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer
AS $$
BEGIN
IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN
return 1;
END IF;
return 0;
END;
$$ LANGUAGE plpgsql;
select some_f('table_name');
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
ERROR: syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
^
********** Error **********
ERROR: syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)
以下是更改为此时出现的错误select * from quote_ident($1) tab where tab.id=1:
ERROR: column tab.id does not exist
LINE 1: ...T EXISTS …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写plpgsql以下形式的函数(注意这是一个简化版本):
CREATE FUNCTION check_valid(tablename regclass) RETURNS boolean AS $$
DECLARE valid_row tablename%ROWTYPE;
BEGIN
EXECUTE format('SELECT * FROM %s', tablename) into valid_row;
IF valid_row IS NULL THEN
RETURN QUERY SELECT false;
ELSIF valid_row.is_valid = false;
RETURN QUERY SELECT false;
ELSIF valid_row.hit_count > valid_row.hit_limit;
RETURN QUERY SELECT false;
ELSE
RETURN QUERY SELECT true;
END IF;
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
失败的部分是DECLARE线.如何根据变量表名声明类型?或许我需要以某种方式施展它?
类似的DECLARE mytable%ROWTYPE;工作正常,但如果我使用变量名称,如tablename%ROWTYPE:
ERROR: relation "tablename" does not exist