有时候会遇到:查询过程,有一部分字段是不需要的,但是字段数量太多了,一个个输入目标字段,真的是太麻烦了,所以写了个函数,用于避开某一字段,自动生成一句命令。

CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" INT)
	RETURNS VARCHAR AS $BODY$BEGIN
	-- Routine body goes here...
	
	RETURN(SELECT
	string_agg ( NAME, ', ' ) 
FROM
	(
	SELECT A.attname AS NAME 
	FROM
		pg_class AS C,
		pg_attribute AS A 
	WHERE
		C.relname = reln
		AND A.attrelid = C.oid 
	AND A.attnum != n_index
	AND A.attnum > 0
	) dd)
	
	;
END$BODY$
	LANGUAGE plpgsql

不过最后生成的结果依旧是一个表,只是方便了取出字段
在这里插入图片描述
还是需要手动再把这句命令加进去。所以还是很鸡肋。
由于我是自学的SQL,水平有限,我觉得这个函数有两处优化的空间,但是还没有实现出来:
1.如何将这句形成命令,融入到查询中,使得查询更加自动化、便捷化。
2.关于n_index,如何实现排除多个字段
一个变种:
可以把n_index从坐标换成对应的字段名字

CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" VARCHAR)  --字符串类型
	RETURNS VARCHAR AS $BODY$BEGIN
	-- Routine body goes here...
	
	RETURN(SELECT
	string_agg ( NAME, ', ' ) 
FROM
	(
	SELECT A.attname AS NAME 
	FROM
		pg_class AS C,
		pg_attribute AS A 
	WHERE
		C.relname = reln
		AND A.attrelid = C.oid 
	AND A.attname != n_index    --字段名
	AND A.attnum > 0
	) dd)
	
	;
END$BODY$
	LANGUAGE plpgsql

如果大家有想法,或者成功实现了,或者优化了,请在评论区教教我,谢谢

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐