Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
场景如下:
--创建类型(type)create or replace type list_obj is table of number;--创建表结构create table test( name varchar2(30) primary key check(regexp_like(name,'^([a-z]|[0-9]|_)+$')), id number not null, version_list list_obj) nested table version_list store as version_list;
场景说明:类型 list_obj 相当一个元素为数字的列表。表 test 有三个字段,字段 name 为主键限制只能使用小写字母、数字、下划线组成的字符串;字段 id 是数字,限制为非空;字段 version_list 是类型为 list_obj 的嵌套表。
操作1:
--插入一条记录insert into test(name, id) values('mophee', 1);
查询结果如下:
目前 version_list 为空(注意,是 null),现在我们需要开始维护该字段:往 name='mophee' 的记录插入一个版本号20130403112459。语句如下:
--插入一个版本号insert into table(select version_list from test where name='mophee') values(20130403112459);
执行以上 insert 语句就报错了!
原因是什么?version_list 字段目前是 NULL,以上insert语句试图做这个动作:table(NULL),也就是要将NULL对象化成一个表。这事有违常理,ORACLE干不了!
那么怎么解决呢?version_list 字段之所以为NULL,是因为我们根本没对它进行初始化。那么,在insert之前先对其初始化不久能解决问题了吗?
方法一:在往 test 表 insert 的时候使用如下语句
--插入一条记录insert into test(name, id, version_list) values('mophee', 1, list_obj());
方法二:在往 version_list 插入版本号之前先对其进行初始化
--将 version_list 字段初始化为 list_obj 对象update test set version_list=list_obj() where name='mophee';
看下图:
这是在 pl/sql developer下的查询输出,注意 version_list 列数据单元格的背景色(与上方图片对比一下)已经不是淡黄色(此时字段值为null)!虽然查看 version_list 字段的内部内容依旧是没有一条记录,但是意义上是不一样的――初始化之前是 null,初始化之后才是 list_obj 对象。
您可能感兴趣的文章:
- Oracle异常[ORA-22908:NULL表值的参考]问题的解析及解决方法
- Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
- ORACLE EXP不能导出空表的原因分析及解决方法
- 异常宕机 Ora-00600 [Kccpb_sanity_check_2] 错误解决方法
- Oracle 10g启动后报ORA-16038错误的解决方法
- 常见oracle错误代码ORA-xxxxx及其解决方法(持续更行中)
- ORA-01034:ORACLE not available问题的解决方法
- ORA-01034:ORACLE not available 问题的解决方法
- 【oracle常见错误】ora-00119和ora-00132问题的解决方法
- C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
- ORA-01033:ORACLE initialization or shutdown 错误解决方法
- Oracle Workflow异常 ORA-04068: ORA-04061: ORA-04065: ORA-06508 解决办法 (二)
- ora-01033:oracle initialization or shutdown in progress 解决方法
- 服务器突然断电造成oracle实例不能正常启动报ora-01172 ora-01151的解决方法
- ora-01033:oracle initialization or shutdown in progress 解决方法
- oracle共享服务器配置后,无法进行正常的连接,报错ora-28547的解决方法
- Oracle 11g ORA-12560: TNS: 协议适配器错误!解决方法
- ORACLE 报错ORA-00439、ORA-01078、LRM-00109、ORA-38760的解决方法
- oracle错误:ORA-28002: the password will expire within 7 days 解决方法
- ora-01033:oracle initialization or shutdown in progress 解决方法