视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于OracleNULL栏位和PL./SQL执行实验
2020-11-09 14:26:54 责编:小采
文档


今日有针对Oracle NULL值有了相关实验. 对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实用技巧分享

--------------------------------------分割线 --------------------------------------

本文永久更新链接地址:

下载本文
显示全文
专题