在postgres中使用存储过程更新?

时间:2012-03-05 07:47:31

标签: postgresql stored-procedures

我希望我的存储过程允许用户更新数据。

以下是程序:

CREATE OR REPLACE FUNCTION update_table (
   IN _table      character varying,
   IN _col_mod    character varying,
   IN _val_mod    character varying,
   IN _col_filter character varying,
   IN _val_filter character varying
)
RETURNS void
AS
$$
BEGIN
    RAISE NOTICE 'Update table %', _table;
    EXECUTE ' UPDATE ' || quote_ident(_table) || ' SET ' || quote_ident(_col_mod) || ' = $1 WHERE ' || quote_ident(_col_filter) || ' = $2'
    USING _val_mod, _val_filter;
END;
$$
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; 

我想问一下,这个程序是否有效?因为看起来我只是重新创建查询。

我创建这样的程序的原因是在我的办公室我有新的策略,DBA不允许直接在数据库中执行查询。我们必须使用存储过程来进行DML和数据检索查询。

提前致谢..:D

1 个答案:

答案 0 :(得分:3)

如果是9.1,您可以使用format()使其更清晰:

EXECUTE format(
    'UPDATE %I SET %I = $1 WHERE %I = $2', _table, _col_mod, _col_filter
    )
USING _val_mod, _val_filter;