2011-10-17 記錄型別判斷非空的辦法
我建立瞭如下的包:
CREATE OR REPLACE PACKAGE plch_pkg IS TYPE info_rt IS RECORD ( name VARCHAR2 (100) , dob DATE ); TYPE info_plus_rt IS RECORD ( group_name VARCHAR2 (100) , group_total NUMBER , more_info info_rt ); END; /
哪些選項在執行後將會顯示 "NOT NULL"?
(A)
DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF l_my_record IS NOT NULL THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; /
SQL> DECLARE 2 l_my_record plch_pkg.info_plus_rt; 3 BEGIN 4 l_my_record.group_name := 'Oracle Bloggers'; 5 l_my_record.more_info.dob := SYSDATE; 6 7 IF l_my_record IS NOT NULL 8 THEN 9 DBMS_OUTPUT.put_line ('NOT NULL'); 10 ELSE 11 DBMS_OUTPUT.put_line ('NULL'); 12 END IF; 13 END; 14 / DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF l_my_record IS NOT NULL THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; ORA-06550: 第 7 行, 第 7 列: PLS-00306: 呼叫 'IS NOT NULL' 時引數個數或型別錯誤 ORA-06550: 第 7 行, 第 4 列: PL/SQL: Statement ignored SQL>
(B)
DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF l_my_record.group_name IS NOT NULL OR l_my_record.group_total IS NOT NULL OR l_my_record.more_info IS NOT NULL THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; /
SQL> DECLARE 2 l_my_record plch_pkg.info_plus_rt; 3 BEGIN 4 l_my_record.group_name := 'Oracle Bloggers'; 5 l_my_record.more_info.dob := SYSDATE; 6 7 IF l_my_record.group_name IS NOT NULL 8 OR l_my_record.group_total IS NOT NULL 9 OR l_my_record.more_info IS NOT NULL 10 THEN 11 DBMS_OUTPUT.put_line ('NOT NULL'); 12 ELSE 13 DBMS_OUTPUT.put_line ('NULL'); 14 END IF; 15 END; 16 / DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF l_my_record.group_name IS NOT NULL OR l_my_record.group_total IS NOT NULL OR l_my_record.more_info IS NOT NULL THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; ORA-06550: 第 9 行, 第 10 列: PLS-00306: 呼叫 'IS NOT NULL' 時引數個數或型別錯誤 ORA-06550: 第 7 行, 第 4 列: PL/SQL: Statement ignored SQL>
(C)
DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF l_my_record.group_name IS NOT NULL OR l_my_record.group_total IS NOT NULL OR l_my_record.more_info.name IS NOT NULL OR l_my_record.more_info.dob IS NOT NULL THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; /
SQL> DECLARE 2 l_my_record plch_pkg.info_plus_rt; 3 BEGIN 4 l_my_record.group_name := 'Oracle Bloggers'; 5 l_my_record.more_info.dob := SYSDATE; 6 7 IF l_my_record.group_name IS NOT NULL 8 OR l_my_record.group_total IS NOT NULL 9 OR l_my_record.more_info.name IS NOT NULL 10 OR l_my_record.more_info.dob IS NOT NULL 11 THEN 12 DBMS_OUTPUT.put_line ('NOT NULL'); 13 ELSE 14 DBMS_OUTPUT.put_line ('NULL'); 15 END IF; 16 END; 17 / NOT NULL PL/SQL procedure successfully completed SQL>
(D)
CREATE OR REPLACE FUNCTION plch_not_null_rec (rec_in IN plch_pkg.info_plus_rt) RETURN BOOLEAN IS BEGIN RETURN rec_in.group_name IS NOT NULL OR rec_in.group_total IS NOT NULL OR rec_in.more_info.name IS NOT NULL OR rec_in.more_info.dob IS NOT NULL; END; / DECLARE l_my_record plch_pkg.info_plus_rt; BEGIN l_my_record.group_name := 'Oracle Bloggers'; l_my_record.more_info.dob := SYSDATE; IF plch_not_null_rec (l_my_record) THEN DBMS_OUTPUT.put_line ('NOT NULL'); ELSE DBMS_OUTPUT.put_line ('NULL'); END IF; END; /
SQL> CREATE OR REPLACE FUNCTION plch_not_null_rec (rec_in IN plch_pkg.info_plus_rt) 2 RETURN BOOLEAN 3 IS 4 BEGIN 5 RETURN rec_in.group_name IS NOT NULL 6 OR rec_in.group_total IS NOT NULL 7 OR rec_in.more_info.name IS NOT NULL 8 OR rec_in.more_info.dob IS NOT NULL; 9 END; 10 / Function created SQL> DECLARE 2 l_my_record plch_pkg.info_plus_rt; 3 BEGIN 4 l_my_record.group_name := 'Oracle Bloggers'; 5 l_my_record.more_info.dob := SYSDATE; 6 7 IF plch_not_null_rec (l_my_record) 8 THEN 9 DBMS_OUTPUT.put_line ('NOT NULL'); 10 ELSE 11 DBMS_OUTPUT.put_line ('NULL'); 12 END IF; 13 END; 14 / NOT NULL PL/SQL procedure successfully completed SQL>
答案CD
答案說明在 http://www.itpub.net/thread-1499223-7-1.html 61樓
2011-10-17 答案 CD 對記錄型別不能使用IS NOT NULL判斷,否則會出現: PLS-00306: wrong number or types of arguments in call to 'IS NOT NULL' 這導致AB出現異常。 Steven Feuerstein建議你採用D的做法以便於重用程式碼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/680385/viewspace-2645105/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【JAVA】判斷字串非空Java字串
- java中判斷String型別為空和null的方法Java型別Null
- 使用帶型別判斷的比較判斷型別
- 判斷資料庫中表內資料為空的辦法資料庫
- js判斷型別JS型別
- JS 型別判斷JS型別
- 記一次關於js陣列型別判斷及js型別判斷的細節探索JS陣列型別
- 最安全的型別判斷型別
- js中的型別判斷JS型別
- Kotlin可空型別與非空型別以及`lateinit` 的作用Kotlin型別
- js資料型別的判斷JS資料型別
- 判斷值的資料型別資料型別
- 輸出空目錄(無法用length長度為0判斷)
- js判斷資料型別JS資料型別
- JavaScript判斷資料型別JavaScript資料型別
- 如何判斷變數型別變數型別
- js判斷裝置型別JS型別
- Vim檔案型別判斷型別
- JavaScript的資料型別如何判斷JavaScript資料型別
- 如何判斷JavaScript的資料型別?JavaScript資料型別
- MyBatis陣列與集合判斷非空和長度MyBatis陣列
- 判斷空值
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別
- jQuery判斷瀏覽器型別jQuery瀏覽器型別
- 深入瞭解JS型別判斷JS型別
- js資料型別及判斷JS資料型別
- javascript中如何判斷變數的型別?JavaScript變數型別
- javascript 判斷各種資料的型別JavaScript型別
- 選擇適合的型別判斷方式型別
- 深入理解 JavaScript 中的型別和型別判斷問題JavaScript型別
- Javascript判斷空物件JavaScript物件
- JS判斷PC瀏覽器型別JS瀏覽器型別
- python3 判斷資料型別Python資料型別
- python 判斷作業系統型別Python作業系統型別
- 判斷a是否是int型別資料型別
- JS靈巧判斷7種型別的方式JS型別
- 判斷應用所執行的CPU型別型別
- JS資料型別判斷的幾種方法JS資料型別