Oracle OCCI Date.setDate()抛出ORA-32146异常原因咨询
ORA-32146: Cannot perform operation on a null date 异常原因及解决方案
异常核心原因
你触发的ORA-32146异常,本质是传入oracle::occi::Date::setDate的参数不符合OCCI Date类的格式要求,导致Date对象无法被正确初始化,始终处于null状态,进而触发该错误。具体问题出在两个参数的格式不匹配上:
- 年份参数格式错误:C标准库
tm结构体的tm_year字段存储的是「当前年份减去1900」的数值(比如2014年对应的tm_year=114),但OCCI的setDate方法要求年份参数必须是四位完整年份(比如2014)。直接传入114会导致年份值无效,无法构建有效的Date对象。 - 月份参数基准不匹配:C标准库
tm结构体的tm_mon是0-based的(0代表一月,1代表二月),而OCCI的setDate方法的月份参数是1-based的(1代表一月,2代表二月)。你传入的tm_mon=1会被OCCI解析为二月,虽不会直接触发null异常,但会导致日期值不符合预期。
修正后的代码
oracle::occi::Date dt; // 将tm结构体的年份、月份转换为OCCI要求的格式 int occiYear = tt.tm_year + 1900; int occiMonth = tt.tm_mon + 1; dt.setDate(occiYear, occiMonth, tt.tm_mday, tt.tm_hour, tt.tm_min, tt.tm_sec);
说明
修正后,年份转换为2014(114+1900),月份转换为2(1+1),对应2014年2月4日1点2分0秒,参数完全符合OCCI Date类的要求,Date对象会被正确初始化,不会再触发ORA-32146异常。
内容的提问来源于stack exchange,提问作者Arnon
相关产品推荐
相关产品推荐

