sql - 在 Firebird 的 RDB$FIELDS 表中更改 varchar 的大小
问题描述
我正在尝试更改我的 FAIXA_VALORES 表的 CODE 字段的 varchar 大小,但是当尝试使用以下代码更改它时:
update RDB$FIELDS set
RDB$FIELD_LENGTH = 50,
RDB$CHARACTER_LENGTH = 50
where RDB$FIELD_NAME = 'RDB$14392222'
但它返回给我以下错误:
不允许对系统表 RDB$FIELDS 执行 UPDATE 操作。
我已经尝试过使用 alter table,但它也不允许我这样做。有人可以帮助我吗?
解决方案
自 Firebird 3 起,不再允许直接修改系统表(极少数例外);请参阅对系统表的更改和系统表现在是只读的。甚至在 Firebird 3 之前,也不推荐这种做法
要更改列的大小,您需要使用ALTER TABLE
,例如
alter table YOUR_TABLE
alter column YOUR_COLUMN type varchar(50)
这种变化有许多限制。例如,不可能将列更改为比其当前定义短。因此,将 VARCHAR(60) 更改为 VARCHAR(50) 是不可能的。如果您需要这样做,那么您需要添加一个新列,将内容从旧列复制到新列(必要时进行修改),删除旧列并重命名新列:
alter table YOUR_TABLE add NEW_COLUMN varchar(50);
commit;
update YOUR_TABLE set NEW_COLUMN = substring(YOUR_COLUMN from 1 for 50);
commit;
alter table drop YOUR_COLUMN;
alter table alter column NEW_COLUMN to YOUR_COLUMN;
commit;
推荐阅读
- c - 如何在没有 Visual Studio 的情况下为 Windows 编写内核驱动程序?
- discord - 如何向不在语音频道中的特定角色的成员发送私人消息?
- android - Firebase 性能监视器总是使用 Retrofit 和 OkHttp 崩溃
- algorithm - 在合并排序中,为什么不将每个排序的子列表合并到滚动列表中?
- python - Python - 通过变量解析所需数据
- video - 如何将 ffmpeg 与 vidstab 和 filter_complex 一起使用
- java - Java 关闭盒子
- python - 从 Python 中的许多目录中删除一组字符串
- html - 响应式 - 所有元素在移动设备上都太小了
- node.js - 我正在尝试将 Node.js 应用程序部署到 Google Cloud Platform,但发现 MongoDB 出现错误