Heim  >  Artikel  >  Datenbank  >  Oracle异常[ORA-22908:NULL表值的参考]问题的解析及解决方法

Oracle异常[ORA-22908:NULL表值的参考]问题的解析及解决方法

WBOY
WBOYOriginal
2016-06-07 17:35:38957Durchsuche

Oracle异常[ORA-22908:NULL表值的参考]问题的解析及解决方法

场景如下:

type list_obj ; test( name (regexp_like(name,)), id , version_list list_obj ) nested table version_list store as version_list;

场景说明:类型 list_obj 相当一个元素为数字的列表。表 test 有三个字段,,字段 name 为主键限制只能使用小写字母、数字、下划线组成的字符串;字段 id 是数字,限制为非空;字段 version_list 是类型为 list_obj 的嵌套表。

操作1:

test(name, id) , 1);

查询结果如下:

目前 version_list 为空(注意,是 null),现在我们需要开始维护该字段:往 的记录插入一个版本号20130403112459。语句如下:

() values(20130403112459);

执行以上 insert 语句就报错了!

原因是什么?version_list 字段目前是 NULL,以上insert语句试图做这个动作:table(NULL),也就是要将NULL对象化成一个表。这事有违常理,Oracle干不了!

那么怎么解决呢?version_list 字段之所以为NULL,是因为我们根本没对它进行初始化。那么,在insert之前先对其初始化不久能解决问题了吗?

方法一:在往 test 表 insert 的时候使用如下语句

test(name, id, version_list) , 1, list_obj());

方法二:在往 version_list 插入版本号之前先对其进行初始化

test ;

看下图:

这是在 pl/sql developer下的查询输出,注意 version_list 列数据单元格的背景色(与上方图片对比一下)已经不是淡黄色(此时字段值为null)!虽然查看 version_list 字段的内部内容依旧是没有一条记录,但是意义上是不一样的——初始化之前是 null,初始化之后才是 list_obj 对象。

完毕! 

 

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn