【PostgreSQL】利用的存储过程为多个库表修改字段
提高效率存储过程,在某个schema下相同字段备注修改一致,原先也是一张张表改,后来十几张表,只好进行存储过程处理
存储过程
CREATE OR REPLACE FUNCTION "public"."update_all_column_comment"("schema_name" varchar, "field_name" varchar, "field_comment" varchar)
RETURNS TABLE("message" text) AS $BODY$
-- RETURNS "pg_catalog"."void" AS BODY
-- declare表示声明变量,可以声明多个变量,此处声明了字符d
declare table_name_temp varchar;
declare success bool;
-- 声明了一个数组类型的变量并赋了值,值取自SQL查询不包含某字段的表名信息(避免重复插入表字段)。
declare pg_tables varchar[] := array(
select tablename
from pg_tables
where schemaname = schema_name
);
-- begin表示语句开始
begin
-- 默认设置为成功
success := true;
-- for循环数组(表名),执行插入表字段SQL
foreach table_name_temp in array pg_tables loop
-- 设置字段注释
BEGIN
-- raise notice 'COMMENT ON COLUMN %.%.% IS %;', schema_name, table_name_temp, field_name, field_comment;
execute format ( 'COMMENT ON COLUMN %I.%I.%I IS %L;', schema_name, table_name_temp, field_name, field_comment);
EXCEPTION WHEN others THEN
-- 如果出现异常,设置为失败,并记录错误消息
success := false;
-- RAISE NOTICE 'Failed to update comment for table % and column %', table_name_temp, field_name;
message := 'Failed to update comment for table ' || table_name_temp || ' and column ' || field_name;
RETURN NEXT;
END;
-- 结束循环
end loop;
-- 如果成功,返回成功消息
IF success THEN
message := 'All column comments updated successfully';
END IF;
RETURN NEXT;
-- end表示语句结束
end;
-- 同上方的 BODY 命名一致
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000
执行
SELECT public.update_all_column_comment('public', 'del_flag', '删除标记,0未删除默认,1已删除');
参考
原文地址:https://blog.csdn.net/u010638673/article/details/137516334
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!