Обновить с помощью хранимой процедуры в postgres? - PullRequest
2 голосов
/ 05 марта 2012

Я хочу, чтобы моя хранимая процедура позволяла пользователю обновлять данные.

Вот процедура:

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; 

Я хочу спросить, эффективна ли эта процедура? , потому что, похоже, я просто заново создаю запрос.

И причина, по которой я создаю такую ​​процедуру, заключается в том, что в моем офисе была новая политика, согласно которой администратор баз данных не разрешал выполнять запросы непосредственно в базу данных.Мы должны использовать хранимую процедуру, чтобы сделать DML также запросом на получение данных.

Заранее спасибо ..: D

1 Ответ

3 голосов
/ 06 марта 2012

Если это 9,1, вы можете использовать format(), чтобы сделать его более разборчивым:

EXECUTE format(
    'UPDATE %I SET %I = $1 WHERE %I = $2', _table, _col_mod, _col_filter
    )
USING _val_mod, _val_filter;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...