GBase 8s
适配迁移
问答
修改表中的列名
发表于2024-11-18 10:32:06218次浏览10个评论
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】:GBase8sV8.8_TL_3.5.1_3x_x86_64
【操作系统】:虚拟机银河麒麟v10
【CPU】:intel i7-12700h
【问题描述】*:想遍历每个表,把含有username的列名改为username2,有什么办法?
评论
登录后才可以发表评论
liaosnet发表于 1年前
GBase用户24232发表于 1年前
@liaosnet:在修改字段名的时候报错了,怎么办?

liaosnet发表于 1年前
@liaosnet:少写了 rename column 表名.username to username2;
GBase用户24232发表于 1年前
@liaosnet:解决了谢谢,只能一个个的rename吗,可不可以把select的都遍历再改,需要改的挺多的
liaosnet发表于 1年前
@GBase用户24232:用存储过程,或者生成语句。然后执行。
例如:
在 dbaccess 中执行
unload to renanme_col.sql delimiter ';'
select 'rename column ' || t.tabname || '.username to username2'
from syscolumns col, systables t
where t.tabid = col.tabid
and col.colname = 'username'
and t.tabid > 99;
然后 dbaccess 库名 rename_col.sql 就好。
例如:
在 dbaccess 中执行
unload to renanme_col.sql delimiter ';'
select 'rename column ' || t.tabname || '.username to username2'
from syscolumns col, systables t
where t.tabid = col.tabid
and col.colname = 'username'
and t.tabid > 99;
然后 dbaccess 库名 rename_col.sql 就好。
GBase用户24232发表于 1年前
@liaosnet:报错了,或者说 如果用存储过程怎么写呀

liaosnet发表于 1年前
@GBase用户24232:dbaccess 是命令行中执行的。
GBase用户24232发表于 1年前
@liaosnet:不太明白,命令行这种模式怎么进入?
liaosnet发表于 1年前
@GBase用户24232:参考下图:dbaccess testdb - 进入testdb库,执行语句
ctrl + \ 退出交互
dbaccess testdb rename_col.sql 在testdb库中执行rename_col.sql
ctrl + \ 退出交互
dbaccess testdb rename_col.sql 在testdb库中执行rename_col.sql

最佳回答
GBase用户24232发表于 1年前
@liaosnet:可以提供下存储过程的写法吗,非常感谢
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526
1,从syscolumns,与systabes通过tabid关联,获取哪些表有username这个字段。
select col.colname,t.tabname
from syscolumns col, systables t
where t.tabid = col.tabid
and col.colname = 'username'
and t.tabid > 99;
2, 通过rename column语句修改字段名称
rename 表名.username to username2;