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

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:57:45
字體:
來源:轉載
供稿:網友

場景如下:

--創建類型(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),現在我們需要開始維護該字段:往 的記錄插入一個版本號20130403112459。語句如下:

--插入一個版本號insert into table(select version_list from test where) values(20130403112459);

執行以上 insert 語句就報錯了!

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

原因是什么?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;

看下圖:

這是在 pl/sql developer下的查詢輸出,注意 version_list 列數據單元格的背景色(與上方圖片對比一下)已經不是淡黃色(此時字段值為null)!雖然查看 version_list 字段的內部內容依舊是沒有一條記錄,但是意義上是不一樣的——初始化之前是 null,初始化之后才是 list_obj 對象。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马尔康县| 贺州市| 化州市| 东海县| 平泉县| 榆中县| 于都县| 莱芜市| 闻喜县| 安达市| 宁陕县| 商洛市| 永寿县| 靖边县| 临猗县| 珠海市| 滨州市| 南皮县| 台东县| 师宗县| 扶沟县| 芦溪县| 射洪县| 金寨县| 台中县| 惠东县| 柳州市| 磴口县| 祥云县| 咸丰县| 睢宁县| 普兰店市| 中西区| 清水县| 承德县| 四川省| 中宁县| 连城县| 蓬安县| 怀化市| 昂仁县|