DBA之路--oracle数据隐型转换

oracle数据隐型转换

目前oracle针对库内数据存在两种转换方式,显示类型转换与隐式类型转换。

如果语句进行比较运算的数据的数据类型各不相同时,oracl而会将其中不相同的类型进行类型转换使其能够进行运算,这种转换属于是自动类型的,进行的前提是有意义

隐式转换规则-摘抄部分常见

  • 对于INSERT和UPDATE操作,ORACLE会把插入值或者更新值隐式转换为对应字段的数据类型。
  • 对于SELECT语句,ORACLE会把字段的数据类型隐式转换为变量的数据类型
  • 当比较一个字符型和数值型的值时,ORACLE会把字符型的值隐式转换为数值型
  • 将CLOB值转换为字符数据类型(例如VARCHAR2)或将BLOB转换为RAW数据时,如果要转换的数据大于目标数据类型,则数据库将返回错误
  • 当处理数值时,ORACLE通常会调整精度和小数位,以实现最大容量。会造成数据类型与实际数据类型不匹配
  • 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集
  • 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则ORACLE会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等
  • 表链接操作,oracle会隐形转换非字符到字符
  • 使用=号时,默认将等号右边类型转换为左边的类型
  • 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集

隐式转换注意点,主要为字符型转换为日期型,由于日期型转换与变量NLS_DATE_FORMAT关联(涉及到日期的格式),所以容易出现逻辑错误

sql 复制代码
#查询含有存在隐式转换数据类型的sql语句(只能获取到内存(高速缓存中)中保存的sql,即至少执行过一次的sql计划)
SELECT SQL_ID,PLAN_HASH_VALUE FROM V$SQL_PLAN X WHERE X.FILTER_PREDICATES LIKE '%INTERNAL_FUNCTION%'GROUP BY  SQL_ID,PLAN_HASH_VALUE; 
#依照sql解析计划进行查找
SELECT SQL_ID,PLAN_HASH_VALUE FROM V$SQL_PLAN X WHERE X.FILTER_PREDICATES LIKE '%SYS_OP_C2C%'GROUP BY SQL_ID,PLAN_HASH_VALUE;

#v$sql_plan含有两个字段,FILTER_PREDICATES与Access_PREDICATES。这两个字段专门用于对sql语句中的谓词进行解释,具有很大区分,一个是面向含有索引的sql表语句,另外一个是面向没有索引的sql表语句。
#直接就sql语句而言
 #Access_PREDICATES:知道要取什么数据,在哪里取,直接取--索引
 #FILTER_PREDICATES:先把数据取出,然后判断是否满足条件--无索引
相关推荐
灵机一物2 分钟前
企业选型参考:2026 CXL 内存扩展方案六强测评与落地指南
服务器·网络·数据库·人工智能
秋风渡.4 分钟前
MySQL_数据类型知识
数据库·mysql
Season45037 分钟前
Redis命令 (generic即通用命令)
数据库·redis·bootstrap
liwulin05061 小时前
【ollama】自定义结构化输出
linux·前端·数据库·ollama
木易士心2 小时前
MyBatis数据源切换全面解析
数据库
新中地GIS开发老师2 小时前
地信职业百科④:GIS开发工程师
前端·数据库·gis·webgis·三维gis开发
云和恩墨2 小时前
从“第二存储”到多智能体协作,云和恩墨充实数据基础设施产品矩阵
数据库
ClouGence2 小时前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
霸道流氓气质2 小时前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复2 小时前
redis缓存和数据库数据保持一致
数据库·redis·缓存