Elv*_*vis 1 sql oracle oracle11g
我在 Oracle 11g 上运行了以下查询。
SELECT
T.TABLE_NAME,
T.TABLESPACE_NAME,
T.CACHE,
FROM ALL_TABLES T
Run Code Online (Sandbox Code Playgroud)
然后,Cache 属性的 Y 或 N 值前面有一个空格,导致我的代码出错。
即使我使用 Dbeaver 或 JDBC ResultSet 进行检查,也包括空白。这是有意在 Oracle 中添加空格吗?或者这是一个错误?首先,我使用trim()解决了它。
谢谢
CACHE列的数据类型是VARCHAR2(5). 文档说它包含Y或N(取决于表是否要缓存在缓冲区缓存中)。那么,为什么 Oracle 不将其声明为CHAR(1)?会的,对吧?
但是,如果您检查ALL_TABLES源查询,您会注意到该CACHE列如下所示:
LPAD (DECODE (BITAND (t.flags, 8), 8, 'Y', 'N'), 5),
Run Code Online (Sandbox Code Playgroud)
Oracle 决定将其保留为5字符长度(带空格)(虽然最后一个参数未指定,但其默认值为单个空格):
SQL> select lpad('Y', 5) cache from dual;
CACHE
-----
Y
SQL>
Run Code Online (Sandbox Code Playgroud)
所以,是的 - Oracle 是故意这样做的,但我不知道为什么。
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |