微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数上的变量列名

如何解决函数上的变量列名

我是 pgsql 的新手,但我有 8 年的 MSsql 经验,我想要实现的是:创建一个函数来应用它从名称删除无效数据,它将删除所有特殊字符、数字和重音符号,只保留空格和 aZ 字符,我想在不同表的列上使用它,但我真的找不到我做错了什么。

这是我的代码

CREATE OR REPLACE FUNCTION f_validaNome (VARCHAR(255)) 
  RETURNS VARCHAR(255) AS 
SELECT  regexp_replace(unaccent($1),'[^[:alpha:]\s]','','g')
COMMIT

如果我跑

SELECT  regexp_replace(unaccent(column_name),'g') 
from TableA 

我的代码运行良好。我不知道函数代码到底有什么问题。

解决方法

Postgres 中的函数不是这样编写的。

As documented in the manual 函数体必须作为字符串传递,你需要指定函数是用哪种语言编写的。函数可以用 SQL、PL/pgSQL、PL/python、PL/perl 和许多其他。也不需要按位置引用参数。传递 dollar quoted 字符串可以更轻松地编写函数体。

对于您正在做的事情,一个简单的 SQL function 就足够了。也没有必要使用像 255 这样的任意字符限制(与任何其他定义的最大长度相比,它确实具有任何性能或存储优势)。所以只需使用 text

CREATE OR REPLACE FUNCTION f_validanome (p_input text) 
  RETURNS text 
AS 
$body$ --<< string starts here. 
  SELECT regexp_replace(unaccent(p_input),'[^[:alpha:]\s]','','g'); --<< required ; at the end
$body$ --<< string ends here
language sql
immutable; --<< required ; at the end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。