首页 / 数据库 / MySQL / 关于 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退格、上翻键乱码问题 http://www.linuxidc.com/Linux/2013-07/87890.htmSQLPLUS spool 到动态日志文件名 http://www.linuxidc.com/Linux/2013-03/80988.htmOracle SQLPLUS提示符设置 http://www.linuxidc.com/Linux/2012-10/73326.htm通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度 http://www.linuxidc.com/Linux/2011-07/38711.htmPL/SQL Developer实用技巧分享 http://www.linuxidc.com/Linux/2014-09/107391.htm--------------------------------------分割线 --------------------------------------更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址