PostgreSQL 调用存储过程更新表字段类型

本次只针对个人问题解决,贴出来以作记录
1、问题说明
oracle -> Postgresql迁移库之后遇到一个问题,原本在oracle库中表字段类型为number转到Postgresql中之后变成了numeric(1000,53)。

下图所示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

后台登录查询此表报错为:
System.Exception: Reset() called on connector with state Fetching

故写此存储过程进行批量更新下:

CREATE OR REPLACE PROCEDURE PRO_ALTERFIED() LANGUAGE PLPGSQL AS $$
declare
i record;
fied varchar;
 pgSqlScript text;
begin
for i in (SELECT A.TABLENAME,
	B.RELNAME,
    c.attname,
	FORMAT_TYPE(C.ATTTYPID,C.ATTTYPMOD) AS TYPE
FROM PG_TABLES AS A,
  PG_CLASS AS B,
  PG_ATTRIBUTE AS C
WHERE A.SCHEMANAME = CURRENT_SCHEMA()
  AND A.TABLENAME = B.RELNAME
  AND c.ATTRELID = b.OID
    and FORMAT_TYPE(C.ATTTYPID,C.ATTTYPMOD) ='numeric(1000,53)' and a.tablename='t_hospital') loop
    fied =i.attname;
    pgSqlScript:='ALTER TABLE t_hospital  ALTER COLUMN '||fied || ' TYPE numeric(1000,4)';
    execute pgSqlScript;
    commit;
    RAISE NOTICE  '本次更新数据条数:%',fied; --打印输出
    end loop;
end;
$$;

--调用
call pro_alterfied();

调用完成后即打印输出内容如下:
在这里插入图片描述

更新完成之后再次查看表里字段类型:


SELECT A.TABLENAME,--表名
	B.RELNAME, --表名
	FORMAT_TYPE(C.ATTTYPID,C.ATTTYPMOD) AS TYPE,--类型
    c.attname as name, --字段
    col_description(c.attrelid,c.attnum) as comment --注释
FROM PG_TABLES AS A,
	PG_CLASS AS B,
	PG_ATTRIBUTE AS C
WHERE A.SCHEMANAME = CURRENT_SCHEMA()
	AND A.TABLENAME = B.RELNAME
	AND c.ATTRELID = b.OID 
    and FORMAT_TYPE(C.ATTTYPID,C.ATTTYPMOD) ='numeric(1000,4)'
    and a.tablename='t_hospital';
    

在这里插入图片描述

已经更新成功!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值