Oracle 11g 的 ALL_TABLES table 查找存在错误
There is a bug with Oracle 11g's ALL_TABLES table lookup
我在 Oracle 11g 上 运行 下面的查询。
SELECT
T.TABLE_NAME,
T.TABLESPACE_NAME,
T.CACHE,
FROM ALL_TABLES T
然后,Cache属性的Y或N值前面多了一个space,导致我的代码出错
即使我用Dbeaver或JDBC ResultSet检查,也包含空白。
这是在 Oracle 中有意添加的 space 吗?或者这是一个错误?
首先,我使用 trim().
解决了这个问题
谢谢
CACHE
列的数据类型为 VARCHAR2(5)
。文档说它包含 Y
或 N
(取决于 table 是否要缓存在缓冲区缓存中)。那么,为什么 Oracle 不将其声明为 CHAR(1)
?应该可以吧?
但是,如果您检查 ALL_TABLES
源查询,您会注意到 CACHE
列如下所示:
LPAD (DECODE (BITAND (t.flags, 8), 8, 'Y', 'N'), 5),
Oracle 决定将其左填充到长度为 5
个字符(带空格)(虽然未指定最后一个参数,但其默认值是一个空格):
SQL> select lpad('Y', 5) cache from dual;
CACHE
-----
Y
SQL>
所以,是的 - Oracle 是故意这样做的,但我不知道 为什么 。
我在 Oracle 11g 上 运行 下面的查询。
SELECT
T.TABLE_NAME,
T.TABLESPACE_NAME,
T.CACHE,
FROM ALL_TABLES T
然后,Cache属性的Y或N值前面多了一个space,导致我的代码出错
即使我用Dbeaver或JDBC ResultSet检查,也包含空白。 这是在 Oracle 中有意添加的 space 吗?或者这是一个错误? 首先,我使用 trim().
解决了这个问题谢谢
CACHE
列的数据类型为 VARCHAR2(5)
。文档说它包含 Y
或 N
(取决于 table 是否要缓存在缓冲区缓存中)。那么,为什么 Oracle 不将其声明为 CHAR(1)
?应该可以吧?
但是,如果您检查 ALL_TABLES
源查询,您会注意到 CACHE
列如下所示:
LPAD (DECODE (BITAND (t.flags, 8), 8, 'Y', 'N'), 5),
Oracle 决定将其左填充到长度为 5
个字符(带空格)(虽然未指定最后一个参数,但其默认值是一个空格):
SQL> select lpad('Y', 5) cache from dual;
CACHE
-----
Y
SQL>
所以,是的 - Oracle 是故意这样做的,但我不知道 为什么 。