这个是类型转换问题:
select * from A,B where A.CourseNum=B.billon;
其中CourseNum为number类型,billion为varchar2类型。
select * from A,B where A.CourseNum=字符串,字符串能够转为数字的,就没有问题。
select * from A,B where A.CourseNum=B.billon;
其中CourseNum为number类型,billion为varchar2类型。
假如b.billion全部都是可以转为number的就没有问题。
--疑问:
DML语句的处理过程:
1、创建游标
2、分析语句,语法分析
(1)翻译SQL语句,验证它是否是合法的语句,即书写的正确
(2)实现数据字典的查找,以验证是否符合表和列的定义。
......
......
在2、(2)中,不对表A.CourseNum=B.billon的列类型进行验证吗?
或者说 这是属于数据转换的范围,只有在执行阶段才识别的?
select * from A,B where A.CourseNum=字符串,字符串能够转为数字的,就没有问题。
select * from A,B where B.billon=数字,则如果B.billon存的都是可以转为数字的,则没问题。但是如果B.billon存的有一个是不可以转为数字的,则有报ORA-01722: 无效数字异常。
数据转换或者键值约束、死锁等,是在执行阶段才确定的。

被折叠的 条评论
为什么被折叠?



