2
我希望我的存儲過程允許用戶更新數據。在postgres中使用存儲過程更新?
這裏的程序:
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
調用一個方法來構造字符串的開銷並不大。以這種方式執行命令不應該增加很多開銷。我認爲新的辦公室政策的目的是保護生產數據庫,確保對其執行的一切都可以檢查。考慮到這一點,你的過程似乎違反了這個政策,因爲你基本上將命令的一半作爲參數傳遞。 – 2012-03-05 09:58:52
這很奇怪,如果這是政策要求你做的事情,那麼最好將你的SQL以電子郵件發送給允許查詢數據庫的人。 – tscho 2012-03-05 22:17:34