国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle ORA-22908(NULL表值的參考)異常分析與解決方法

2020-07-26 14:22:22
字體:
來源:轉載
供稿:網友

場景如下:

--創建類型(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 對象。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄汾县| 铜川市| 青岛市| 鲁山县| 临泽县| 石泉县| 凤台县| 威宁| 天等县| 左权县| 治县。| 富源县| 盖州市| 呼伦贝尔市| 长治市| 务川| 东乡族自治县| 庄河市| 昆明市| 宁城县| 平昌县| 大田县| 凉城县| 颍上县| 富民县| 三台县| 中卫市| 泗水县| 巴东县| 甘洛县| 合山市| 安丘市| 嘉兴市| 齐齐哈尔市| 中牟县| 沈丘县| 台前县| 济南市| 石渠县| 临清市| 蕲春县|