国产探花免费观看_亚洲丰满少妇自慰呻吟_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 對象。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻江县| 玛曲县| 凤冈县| 娄底市| 富宁县| 古蔺县| 夏津县| 莆田市| 武义县| 宁河县| 上蔡县| 元氏县| 溧水县| 基隆市| 扎鲁特旗| 凤山县| 石渠县| 色达县| 定远县| 体育| 南部县| 天长市| 湖北省| 木里| 巴彦县| 阳江市| 巩义市| 汉中市| 磴口县| 石棉县| 合阳县| 扶绥县| 吉木乃县| 巍山| 泽州县| 远安县| 宜君县| 大安市| 丰顺县| 积石山| 炎陵县|