本篇文档对达梦数据库创建表一个“bug”做出相应解释及其分析。
在达梦tool目录下打开达梦Manger工具
[dmdba@EnmoDM ~]$ cd /opt/dm8/tool
[dmdba@EnmoDM tool]$ ./manager
首先创建ENMOTEST1用户下,一张表名为test1的表,表名记得是小写的test1噢!
之后去数据库里查询这张表
SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1' and TABLE_NAME='test1';
LINEID OWNER TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1 ENMOTEST1 test1 TBSPROD VALID
哎,表名真的是小写的!但这还没完,DESC一下这张表试试看呢?
SQL> desc ENMOTEST1.test1
[-20001]:INVALID OBJECT NAME
-20001: OBJ_IS_EXISTS line 201
-20001: SHOW_PARA_INFO line 302 .
used time: 0.863(ms). Execute id is 0.
…难道,DESC表 表名要大写吗?
再试试看,
SQL> DESC ENMOTEST1.TEST1;
[-20001]:INVALID OBJECT NAME
-20001: OBJ_IS_EXISTS line 201
-20001: SHOW_PARA_INFO line 302 .
used time: 0.563(ms). Execute id is 0.
咋还是报错,这是怎么一回事?
不知道的话,我们继续往下测试看看呢
同上步骤,创建一张表名大写的表TEST2。
之后再去数据库里查询这张表
SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1' and TABLE_NAME='TEST2';
LINEID OWNER TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1 ENMOTEST1 TEST2 TBSPROD VALID
我们DESC一下这张表看看,
SQL> DESC ENMOTEST1.TEST2
LINEID NAME TYPE$ NULLABLE
---------- ---- ----------- --------
1 NAME CHAR(20) Y
2 ID VARCHAR(20) Y
used time: 0.994(ms). Execute id is 1622.
这就正常了!接下来我们到数据库里用DDL语句建表试试看是否跟用达梦Manager工具情况相同呢?
进入数据库,
SQL> create table ENMOTEST1.test5 (name char(20),id char(20),status char(20));
executed successfully
used time: 2.534(ms). Execute id is 1612.
SQL> desc ENMOTEST1.TEST5
LINEID NAME TYPE$ NULLABLE
---------- ------ -------- --------
1 NAME CHAR(20) Y
2 ID CHAR(20) Y
3 STATUS CHAR(20) Y
SQL> desc ENMOTEST1.test5
LINEID NAME TYPE$ NULLABLE
---------- ------ -------- --------
1 NAME CHAR(20) Y
2 ID CHAR(20) Y
3 STATUS CHAR(20) Y
哎,在数据库中用DDL语句创建的表名是小写的表,desc 大写表名,还是desc小写表名都是可以找到的。那我们查看一下dba_tables呢。
SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,STATUS from dba_tables where OWNER='ENMOTEST1';
LINEID OWNER TABLE_NAME TABLESPACE_NAME STATUS
---------- --------- ---------- --------------- ------
1 ENMOTEST1 test1 TBSPROD VALID
2 ENMOTEST1 TEST2 TBSPROD VALID
3 ENMOTEST1 TEST5 TBSPROD VALID
发现呀,这张表就是一个大写表名的表,跟用达梦MANAGER创建的小写表名的表的TABLE_NAME字段显示的不同噢!
Manger工具 | DDL语句 | |
---|---|---|
小写表名 | 不可行! | 可行 |
大写表名 | 可行 | 可行 |
这里的不可行,是否真的不可行呢?让我们看看达梦Manger工具建表DDL语句。看看这个可视化管理工具到底是如何创建的表。
朋友们发现问题了吗?达梦Manager可视化建表DDL语句是默认带 " " 的,让我们回数据库看看是否是这个问题。
SQL> SELECT * FROM ENMOTEST1."test1";
LINEID NAME HEIGHT WEIGHT
---------- ---------- ---------- ----------
1 邓梓龙 175cm 65kg
2 黄美斌 170cm 60kg
哎,问题解决。
大家在使用达梦Manager可视化工具的时候一定要记得查看一下DDL语句,能帮你避开很多坑,比如这次我遇到的这个坑。如果我先看了DDL语句,我就知道噢,要加 " " 。
文章
阅读量
获赞