首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建函数:$$或其附近的语法错误

创建函数:$$或其附近的语法错误
EN

Stack Overflow用户
提问于 2016-01-02 22:53:43
回答 2查看 2.6K关注 0票数 1

我是Postgres的初学者,我想自动从带有函数的表中删除列。但它给了我我在标题中提到的错误。

这是我的密码:

代码语言:javascript
运行
复制
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行:$$

有什么问题吗?我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-03 02:49:12

几乎所有关于你的功能都是错误的。最重要的是,不能在普通SQL中参数化标识符。您需要在plpgsql函数中使用带有EXECUTE的动态SQL (或支持它的任何其他过程语言)。这将完成以下工作:

代码语言:javascript
运行
复制
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;

呼叫:

代码语言:javascript
运行
复制
SELECT drop_column('my_tbl', 'my_column');

在这里阅读手册开始,学习一些相关的问题和答案。

要特别注意防止SQL注入:

票数 3
EN

Stack Overflow用户

发布于 2016-01-02 22:55:38

你忘了关键字AS

代码语言:javascript
运行
复制
create function dropColumn(table_name text,col_name text) returns void AS $$
ALTER TABLE $1 DROP COLUMN IF EXIST $2;
$$
language 'psql';
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34571560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档