關於 Oracle NULL欄位和PL./SQL執行實驗
今日有針對Oracle NULL值有了相關實驗. 對NULL 值插入的討論。
1, PL/SQL 中可以執行插入''或者NULL 的操作, 前提是欄位允許為空白.
2, 可以對NULL進行一系列資料庫運算. 如:
SELECT ROUND(TO_NUMBER(MAX(A.IN_STATION_TIME)-SYSDATE))*24 FROM SFISM4.R_WIP_TRACKING_T A WHERE
A.IN_STATION_TIME IS NULL
總結: 相應TO_NUMBER(NULL)也是可行, MAX 也是可行得,沒有問題.
3, 迴歸主題, SQL 原本的樣子要做成這個樣:
INSERT INTO SFISM4.R_DT_PCB_OVERTIME_T F
(F.SERIAL_NUMBER,
F.MODEL_NAME,
F.LINE_NAME,
F.PRODUCTION_TIME,
F.INTERCEPT_TIME,
F.EXPRIATUION_HOUR,
F.STATE_FLAG,
F.SEND_USER)
(SELECT 'COCO111111111',
'NIUBI1',
'15555',
NVL(NULL, MAX(A.IN_STATION_TIME)),
SYSDATE,
NVL(ROUND(TO_NUMBER(MAX(A.IN_STATION_TIME)-SYSDATE))*24, '0'),
'1',
'1'
FROM SFISM4.R_WIP_LOG_T E
WHERE E.SERIAL_NUMBER = 'COCO111111111') AND E.GROUP_NAME = 'SMTS')
結果, 部分執行後, 一條也不會插入. Insert 操作, 根據子查詢, 如果子查詢為空白, 那麼什麼都不會插入.
4, 高潮來了-- 去掉子查詢中的WHERE後, 即SELECT 條件都是肯定有值後, 居然將表E中全部記錄插入. 啊, 幸虧是測試庫, 資料量不大, 但是也執行了5s. 好吧, 異常. 全部刪除! 可見根據結果集Insert還是需要謹慎啊, 否則將多少垃圾資料在實際中.
5, 迴歸本意. 最終針對NULL值單獨判定, 防止意外大量資料產生.
--------------------------------------分割線 --------------------------------------
rlwrap - 解決Linux下SQLPLUS退格、上翻鍵亂碼問題
SQLPLUS spool 到動態記錄檔名
Oracle SQLPLUS提示符設定
通過設定SQLPLUS ARRAYSIZE(行預取)加快SQL返回速度
PL/SQL Developer實用技巧分享
--------------------------------------分割線 --------------------------------------