人大金仓是国产数据库,但是网上资料较少。这个项目偶然使用了这个数据库。就将使用过程中产生的一些问题总结一下,发表出来。大家有什么问题也可以在评论区提出,我们一起研究讨论。
这个数据库是仿照Oracle数据库做的,所以有些疑难问题而已参照Oracle的做法来。还是不行的话,就只能通过查看人大金仓的帮助文档来找解决方案了。
- 更新表结构时出错
SQL语句:
alter table TB_CA ALTER COLUMN CA_NAME TYPE VARCHAR(100);
报错信息:
执行语句:1
alter table TB_CA ALTER COLUMN CA_NAME TYPE VARCHAR(100);
执行成功: 否
执行耗时: 3 毫秒
服务器消息:
[KingbaseES Server]ERROR: 不能使用视图或者规则修改一个列的类型
0 条语句执行成功
1 条语句执行失败
根据错误可以知道,这是因为在视图中引用了该字段,所以不允许修改。
我们可以先执行删除视图的操作,然后再修改该字段,之后再执行视图的创建操作
可以这样写:
-- 先删除用的到视图
DROP VIEW "PUBLIC"."VW_CERT_POLICY";
-- 然后执行相应的修改操作
alter table TB_CA ALTER COLUMN CA_NAME TYPE VARCHAR(100);
-- 最后再将该视图重建即可。即创建视图
CREATE FORCE VIEW "PUBLIC"."VW_CERT_POLICY"("CA_ID","RPOLICY_ID","ATTRIBUTE_NAME","ATTRIBUTE_ITEM_IN_CERT","ATTRIBUTE_IN_CERT_TYPE","CA_NAME")
AS
SELECT TB_CA.CA_ID, TB_CERT_POLICY.RPOLICY_ID, TB_CERT_POLICY.ATTRIBUTE_NAME, TB_CERT_POLICY.ATTRIBUTE_ITEM_IN_CERT, TB_CERT_POLICY.ATTRIBUTE_IN_CERT_TYPE, TB_CERT_POLICY.CA_NAME
FROM TB_CERT_POLICY
LEFT JOIN TB_CA ON TB_CERT_POLICY.CA_NAME = TB_CA.CA_NAME;
- 删除数据时的空值问题
delete from TB_APP where APP_NAME is null; --删除varchar类型的空值用 is null
delete from TB_OPT_LOG where APP_REGION=''; --删除text类型的空值用 =''
- 创建表并新增一条数据
CREATE TABLE "PUBLIC"."TB_SYS_CONFIGURE"(
"ATTR_KEY" VARCHAR (100) NOT NULL ,
"ATTR_VALUE" VARCHAR (100) NOT NULL
)WITHOUT OIDS
TABLESPACE "SYSTEM";
--新增一条数据
INSERT INTO TB_SYS_CONFIGURE
(ATTR_KEY, ATTR_VALUE)
VALUES ('accessCount', '2764');
或是创建之后新增多条数据
CREATE TABLE "PUBLIC"."TB_SYS_CONFIGURE"(
"ATTR_KEY" VARCHAR (100) NOT NULL ,
"ATTR_VALUE" VARCHAR (100) NOT NULL
)WITHOUT OIDS
TABLESPACE "SYSTEM";
--新增多条数据,多条数据之间以逗号分隔
INSERT INTO TB_SYS_CONFIGURE
(ATTR_KEY, ATTR_VALUE)
VALUES ('accessCount', '2764'),
('accessCountOne', '3456'),
('accessCountTwo', '7890');