为何强类型REF CURSOR查询不同表时未抛出错误?
强类型REF CURSOR查询不同表未报错的原因
Oracle的强类型REF CURSOR(带RETURN子句的REF CURSOR)不会因为查询表名不同就报错,核心原因是它的类型校验基于行结构兼容性,而非表名本身:
- 你通过
create table employees as select * from students;创建的employees表,其行结构(列名、数据类型、列顺序、精度/刻度等所有属性)和students表完全一致。 students%rowtype是一种记录类型,只要查询返回的结果集的行结构和该记录类型完全匹配,Oracle就判定类型兼容,不会抛出错误。- 强类型REF CURSOR的校验逻辑只关注结果集的结构是否符合
RETURN指定的记录类型,不关心结果集来自哪张表。
如果后续修改employees表的结构(比如修改列的数据类型、增减列、调整列顺序),此时用该强类型REF CURSOR查询employees表,就会触发类型不匹配的错误。
内容的提问来源于stack exchange,提问作者shayaaz
相关产品推荐
相关产品推荐

