sql - Oracle 11g 的 ALL_TABLES 表查找存在错误
问题描述
我在 Oracle 11g 上运行了以下查询。
SELECT
T.TABLE_NAME,
T.TABLESPACE_NAME,
T.CACHE,
FROM ALL_TABLES T
然后,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),
Oracle 决定将其填充为5
长度字符(带空格)(尽管未指定最后一个参数,但其默认值为单个空格):
SQL> select lpad('Y', 5) cache from dual;
CACHE
-----
Y
SQL>
所以,是的——甲骨文是故意这样做的,但我不知道为什么。
推荐阅读
- ios - 自定尺寸视图在 UIStackView 中无法正确布局
- database - 雪花在 TIMESTAMP_NTZ 列中显示“无效日期”
- asp.net - 本地主机当前无法处理此请求
- python - 如何使用 Python 在地图上绘制可视化线串?
- ios - 异常的 APNS 离线行为
- design-patterns - java中数据聚合服务的代码重构
- javascript - 我如何从所选选项中获取多个值并使用换行符放入文本区域
- angular - Angular 9 和 GTM 通过 angular-google-tag-manager
- kubernetes-helm - 是否可以在图表中嵌入多个默认 values.yaml 文件?
- javascript - 反应:组件上的图像有问题