我是Postgres的初学者,我想自动从带有函数的表中删除列。但它给了我我在标题中提到的错误。
这是我的密码:
create function dropColumn(table_name text,col_name text) returns void as $$
ALTER TABLE $1 DROP COLUMN IF EXIST $2;
$$
language 'psql';错误:
错误:"$$ language‘psql“处或附近的语法错误;create dropColumn(table_name text,col_name text)返回col_name $$”第1行:$$
有什么问题吗?我怎么才能解决这个问题?
发布于 2016-01-03 02:49:12
几乎所有关于你的功能都是错误的。最重要的是,不能在普通SQL中参数化标识符。您需要在plpgsql函数中使用带有EXECUTE的动态SQL (或支持它的任何其他过程语言)。这将完成以下工作:
CREATE OR REPLACE FUNCTION drop_column(table_name text, col_name text)
RETURNS void AS
$func$
BEGIN
EXECUTE format('ALTER TABLE %I DROP COLUMN IF EXISTS %I'
, table_name, col_name);
END
$func$
LANGUAGE plpgsql;呼叫:
SELECT drop_column('my_tbl', 'my_column');从在这里阅读手册开始,学习一些相关的问题和答案。
要特别注意防止SQL注入:
发布于 2016-01-02 22:55:38
你忘了关键字AS
create function dropColumn(table_name text,col_name text) returns void AS $$
ALTER TABLE $1 DROP COLUMN IF EXIST $2;
$$
language 'psql';https://stackoverflow.com/questions/34571560
复制相似问题