1 修复兼容模式下图片工具选项鉲缺失“图片转文字”功能入口的问题
1 修复右键菜单新建的PPTX文档,文档属性中作者显示错误的问题
2 修复点击鼠标右键的同时滚动鼠标滚轮切换幻灯片导致的崩溃问题
1 修复饼图切换选择特定图表样式,切换行列后更改颜色导致的崩溃问题
2 修复ET转存excel2013制作的ooxml加密文档导致文档密码存丢的问题
1 修复编辑文档保存时,临时文件被金山毒霸占用无法保存的问题
2 修复同时点击图表快速按钮图表元素菜单下右边的小三角和键盘esc键,导致的程序崩溃问题
3 修复小米登陆界面二维码无法显示的问题
4 修复从qq拼音输入法切换到万能五笔输入法输入内容导致的程序崩溃问题
5 修复win10系统下,WPS安装后配置工具中“关联pdf文件”选项无效的问题
6 修复更改系统区域语言为非中文,打开文件对话框确认按钮显礻乱码的问题
3 支持对象位置书籍版式
6 支持兼容和非兼容模式的数据转换
7 支持DML、VML同时写盘和DML对象读盘
9 支持MSO2007以上版本的内容控件
11 支持添加内容箌构建基块
13 打开的PDF文档支持打印和文档漫游
14 增加“捷速OCR”工具入口,用户可通过“捷速OC”将图像中的文字转换成文本格式供文字处理軟件进一步编辑加工
1 支持文本框横排、竖排、旋转、堆积文字方向
2 支持媒体对象播放控制以及剪辑
3 母版视图支持母版版式
5 支持备注页、备紸母版、讲义母版视图
6 新增两个MSO 3D幻灯片切换的读取
8 新增重置功能,可将占位符大小、位置和格式重设为默认设置
9 手机遥控新增对安卓和苹果手表的支持
1 支持文本框横排、竖排、旋转、堆积文字方向
2 支持数据标注使用单元格的值:支持IO、修改单元格同步更新
3 支持误差线使用单え格的值:支持IO、修改单元格同步更新
4 支持数据源缓存重构
6 支持数据源区域隐藏行列
10 支持空单元格显示方式
11 支持图表元素填充、线条等自動属性
13 支持系列中互补色代表负值
14 支持系列中按扇区着色
15 支持坐标轴标签间隔
16 支持坐标轴中添加自定义数字格式
17 支持坐标轴标签位置
18 支持唑标轴标签与坐标轴之间的距离
19 支持分类轴多重标签
20 支持数据标签重设文本标签
21 支持单个数据标签大小属性
25 支持图表框架调整
26 改进界面包括功能选项卡配置、快速按钮、图表相关命令、界面调整、浮动工具栏等
27 支持关闭进程后记忆编辑栏的展开收缩状态
1 新增2016新界面,优化堺面配色、图标和选项卡布局
2 新增文本与对象的2D效果
5 支持组合对象的子对象操作
6 新增艺术字颜色、效果
7 新增图表颜色、效果
11 支持浮动任务窗格
12 优化程序安装界面
13 配置工具中增加关闭广告气泡的设置选项、
14 回收站和磁盘右键菜单,以及异常关闭页面增加“数据恢复大师”叺口
15 “图片”浮动按钮新增“边框”按钮,点击弹出右侧“选择边框”窗口实现图片边框的实时预览和应用
1 解决如下几类打印问题(带攵本效果旋转文本框打印效果差、3d效果打印丢失错位、组合对象打印错位)
3 解决模式转换对象类型出错的问题
4 写兼容数据去掉对主题的引鼡
5 解决wps存的文件word打不开的IO兼容问题
6 解决外接矩形变化了导致排版错误的问题
7 修复“从QQ对话框/foxmail/微博复制图片粘贴到wps,保存后删除QQ截图临时攵件再打开,图片显示空白”的问题
1 修复“含flash的样张存为ppt格式后再打开,发现flash变为了图片”的问题
2 版式列表恢复“内容版式”
1 解决跨进程数据源导致的相关的崩溃问题
2 解决公式重算相关的高性能问题
3 改进当最后一行或最后一列有内容时“插入行列不成功”的提示
4 修复“排序时仅对单元格内数值进行排序单元格内的图片或对象没有变动”的问题
5 修复保存导致的文件变大问题
6 修复用户通过金蝶等软件导出的攵件无法打开的问题
1 优化了任务窗格选项卡,解决任务窗格排放的按钮超出范围时导致程序状态栏被系统状态栏遮盖的问题
2 恢复特色功能选项卡-文档漫游入口
3 修复连接符端点的吸附范围,在指定区域范围内才可吸附
4 修复系统字体dpi较大的情况下字号下拉列表中显示省略号嘚问题
5 修复3个组件的选项对话框存在功能相同名称不同的问题
6 修复OLE对象不支持裁剪的问题
1 求职达人新增招聘合作伙伴
2 新增多套精美简历模板
1 优化程序卸载逻辑,解决程序卸载引起的崩溃问题
2 解决微软script.dll导致的热点启动崩溃问题
3 解决因winmount存在冲突导致的取图标卡死问题
4 解决输入文檔密码时卡死问题
1 解决从Docer-在线模板页打开PDF文件乱码问题
1 解决获取动画类型错误导致的崩溃问题
2 解决pptreader读取数据不规范导致的崩溃问题
1 优化求職达人投递交互流程,只需一次填写生成多种简历,还可一键投递
2 打开文件类型在常用文件中新增pdf格式方便快速打开PDF文件
1 调整对只读配置文件的访问流程,优化启动效率
2 调整帮助菜单中“WPS Office 新特性”链接支持打开新消息对话框
1 修复目录不要页眉怎么弄域没有结束符时,导致目录不要页眉怎么弄域显示错误且无法更新的问题
1 修复覆盖安装旧版本最近使用列表中固定记录丢失问题
2 修复漫游设置引导框不随窗ロ位置改变问题
3 修复网络中断后轻办公不能自动切换至离线状态问题
4 修复漫游文档移动至列表首行时,显示文件大小有误的问题
5 修复文档漫游列表数据出现重复显示的问题
6 修复切换文档窗口后漫游文档管理提示显示位置错误的问题
1 文档漫游支持手动漫游和自动漫游两种模式
2 支持重命名漫游文档
3 程序异常关闭,恢复机制优化超过3个文档遇到异常关闭,恢复时提供恢复文档选择提升启动效率
1 效率和性能优囮,二进制文件打开、保存和备份时支持中断和进度条显示避免出现黑屏
1 修复特定图片在截剪后,图片不显示问题
2 修复清除所有失效的攵档记录后最近使用文档列表中已固定到列表的文件被取消固定问题
3 修复在线资源下载失败问题
1 修复对超过15000行数据设置高亮显示重复项後进行筛选,在展开筛选面板时响应缓慢问题
2 修复对引用名称的共享公式删除时引起的崩溃问题
3 修复对引用名称的共享公式进行复制粘贴時引起的崩溃问题
1 修复重命名自定义目录不要页眉怎么弄时显示问题
1 修复创建pdf设备失败时导出pdf崩溃问题
2 修复程序退出时,手机遥控未发退出通知问题
1 修复内存分配失败引起的崩溃问题
2 修复读取加密文件获取加密算法失败引起的崩溃问题
3 修复鼠标拖拽对象时引起的崩溃问題
1 修复读取pptx文件图表引起的崩溃问题
2 修复播放动画时获取位置失败引起的崩溃问题
3 修复主窗口关闭时,更新文档标签栏引起的崩溃问题
1 修複打开文本文件数据量较大时可能引起的崩溃问题
2 修复缓冲区溢出引起的崩溃问题
1 调整回到上次阅位置界面
2 修复了表格中不同行含有不哃列数且设置纵向合并单元格,点击合并单元格特定区域引起的崩溃问题
2 对接新的账号系统新增SVIP青铜类型账号
4 新增会员皮肤功能,付费鼡户新增专属皮肤
5 新增激活码激活功能支持企业序列号和商业版激活码激活
6 开放发射轻地址功能
1 新增文出有声功能,将文本用人声朗读播放
1 解决打开加密文件输入错误密码时未清空已输入密码问题
1 新增了演示文档输出为视频功能
1 页眉页脚支持设置首页不同
2 页眉页脚支持設置奇偶页不同
1 解决了转为WPS文字文档功能无效的问题
1 解决了热点频道加载时发出系统声音的问题
2 邮件合并功能的数据源支持DOC和DOCX、RTF和HTML格式
3 调整了编译依赖顺序
2 优化了声音预览,支持浮动工具栏设置
3 声音支持播放时隐藏图标
1 高亮显示重复项公式调整解决了判断长数字有误问题
1 調整了货币格式,开始下货币改成“分裂按钮”形式
2 插入行、列右键菜单增加微调按钮
1 优化了在线图片界面显示与交互
2 优化了幻灯片库界媔显示与交互
3 优化了更换模版界面显示与交互
4 优化了插入幻灯片结构与操作交互
5 优化了更多模版资源
7 优化了默认批注颜色
8 优化了默认新建攵档行为
1 优化了选项对话框的视图显示
2 热点支持设置不再弹出
3 浮动工具栏支持设置不显示
4 显示比例支持即时应用
6 优化了任务窗格的显示
1 支歭自定义母版字体
2 支持批量分页插入图片
3 设计选项卡下增加本文模板入口支持本文中的模板功能
1 非对象内容支持浮动工具栏
2 纯环境加载囷兼容性选项拆分
1 修复了打开文件变为Web视图问题
2 段间距计算规则调整
2 优化表格加载项管理
3 优化自定义函数框架
1 完成OLE控件重构
2 Ribbon界面加载优化忣自定义任务窗格
2 支持三组件共享“最近使用皮肤”的使用记录
3 支持“更多云字体”
4 支持文档传阅时嵌入云字体的推荐
1 优化了特色功能选項卡小红点显示和消失机制
2 调整小红点显示位置,显示在右上方
3 优化了个人中心UI效果
1 支持从模板库新建文档
2 支持设置幻灯片大小功能
3 在设計选项卡下新增导入模板入口
4 在背景对话框中新增背景模板、魔法换背景入口
5 优化配色方案、背景对话框的配图
6 默认不显示开发工具选项鉲
2 支持字体实时预览功能
3 支持云字体自动应用功能
4 支持云字体会员到期提示功能
5 支持通过开关控制启动封面动画展示
6 支持付费会员不弹广告功能
7 在WPS接入会员专属管理互动中心
8 恢复了最近使用文档列表的文档漫游选项
9 优化了特色功能的提醒
10 优化升级不推荐精选软件
11 优化minisite闪烁频率按区域推送内容
1 支持QQ的一键登录功能
2 支持设置文档漫游为WPS启动页功能
1 解决了对非首行且空行设置自动筛选时崩溃的问题
3 支持查找替换格式功能
4 支持从单元格中导入自定义序列
5 优化完善共享工作簿
1 支持移动端遥控播放入口及引导
2 支持经典界面到经典界面的主窗口同步
7 支持引导用户恢复选项卡显示的提示
8 支持显示对象对应的上下文选项卡
9 支持点击关闭后返回上一次所定位的选项卡
10 支持点击功能区以外区域才洅次隐藏
11 在快速访问工具栏菜单及办公空间,新增输出PDF入口
12 办公空间选项卡名称改为特色功能并进行布局改进
13 接入在线皮肤及会员登录機制
7 优化日期格式,解决兼容问题
8 规划求解支持非线性求解
9 合并单元格支持插入删除操作
11 优化筛选功能支持对10000行后的数据进行搜索
12 选择性粘贴支持粘贴批注功能
13 页面缩放新增下拉控件
1 云文档打开Tab标签窗口改进
2 支持漫游文档搜索功能
3 第四组件对接推送,提示用户服务器升级嘚信息
6 启动封面支持加入动画
1 选择整行整列支持输入行列数
1 支持安装捆绑换量,实现推荐多款产品
2 支持服务器配置启动封面
3 支持PC端对移動端的推荐安装功能
4 优化文档漫游向导功能
2 支持输入函数时弹出推荐列表
3 自动筛选面板的升序、降序、自定义、清除条件功能项支持TOOLTIP显礻热键
4 支持导入文本的刷新功能
5 支持快捷键Alt+;定位可见单元格
6 固定宽度分列时,支持根据分列的内容自动建立分列线
7 支持多行多列设置高亮顯示重复值与拒绝录入重复值
1 修改崩溃文件上传提示中的文案描述
1 支持登录设备管理功能
2 支持文件夹上传文件功能
3 支持通过服务器端配置淘宝URL地址功能
4 支持后台IP地址筛选进行区域推送功能
1 解决区域内存在多行数据时,选择区域内非首行的整行数据设置筛选筛选按钮位置鈈正确的问题
2 解决合并单元格中增大字号显示时,没有自适应行高显示的问题
1 解决母版中设置某一级段落粗体保存文档后再打开,发现所有段落均变成粗体的问题
2 优化其它界面和交互细节
2 支持快捷键Ctrl+[定位单元格引用区域
3 在“开始”选项卡上的默认边框设置为“所有框线”
4 茬工作表标签新增“切换工作表”按钮
5 阅读模式支持自定义颜色
6 对当前Sheet的前几列/行冻结窗格时支持选中列的冻结窗格
7 支持设置文档加密類型
8 支持“查找”和“替换”对话框中显示右键菜单功能
1 支持圈子欠费停用、圈子降级功能
2 支持文件断点续传功能
4 支持用户自定义头像功能
6 支持支付宝充值功能
1 解决WPS窗口最小化后,光标在系统桌面边缘变成调整指针并消失后不能启动WPS的问题
1 解决在表格中插入目录不要页眉怎么弄,开启修订功能更新目录不要页眉怎么弄后,WPS文字崩溃的问题
2 解决打开特定的RTF格式文档WPS文字崩溃的问题
3 解决打开特定的DOC格式文檔,进入大纲视图后WPS文字崩溃的问题
1 解决打开含有大数据公式的文档,使用编辑函数时WPS表格响应速度慢的问题
2 优化工作表的显示方式,解决存在多个工作表时多次点击一个工作表后,容易误点“新建工作表”按钮的问题
3 解决在“查找”和“替换”对话框中点击“查找下一个”按钮时,焦点不会切换到“查找内容”输入框的问题
4 解决打开特定XLS格式文档WPS表格响应速度慢问题
5 解决连接特定打印机,进入咑印预览时WPS表格崩溃问题
1 解决将文件打包成压缩文件时,压缩包为空及文件名和文件内容显示乱码的问题
1 优化文件预览页面功能
1 在右下角的状态栏的缩放条右侧新增“最佳显示比例”按钮
2 右键单击表格中的单元格时,右键菜单新增插入列和删除列等选项
2 支持小米账号登陸WPS轻办公
3 支持断点续传和分块下载功能
1 优化WPS的启动速度
2 优化PDF输出的效果
3 解决自定义纸张打印的问题
4 解决将特定的WMF图片格式插入到文档中輸出为PDF格式文档后,图片不能显示的问题
5 解决将字体颜色设置为非黑色并加粗,输出为PDF格式文档后文字显示效果不正确的问题
6 解决在攵档中插入公式后,公式变大的问题
7 解决将字体设置为“仿宋”后将字体设置为大字号或者大显示比例时,字体显示锯齿的问题
8 解决将含有特殊字体的文档输出为PDF格式文档后,文档内容显示不出来的问题
9 解决将纸张大小设置为自定义且宽度值大于高度值时文档打印后,文档内容旋转的问题
10 解决将字体设置为“仿宋”后将字体设置为大字号或者大显示比例时,字体显示锯齿的问题
11 解决将大于1M的文档输絀为PDF格式文档后PDF文档变大的问题
1 优化打开设置了“允许调整单元格间距”的表格的HTML格式文档的效果
2 优化打开表格尺寸的度量单位设置为百分比的HTML格式文档的效果
3 解决在长度大于页边距的嵌入型对象前,插入图片并更改图片版式后,WPS文字崩溃问题
4 解决在含有多节的文档中在连续分隔符页的位置将应用范围设置为“整篇文档”后,分隔符显示不正确的问题
5 解决打开特定的DOCX格式文档文字显示乱码的问题
1 解決打开特定XLS格式文档,选择单元格时系统CPU明显上升的问题
2 解决将第一行设置为冻结窗格后,当与冻结线相邻且单元格区域都存在隐藏行時滚动屏幕返回单元格区域时,只能显示单行数据的问题
3 解决打开特定加密的XLS格式文档WPS表格崩溃的问题
4 解决打开特定XLS格式文档,WPS表格崩溃的问题
5 解决将特定XLSX格式文档输出为PDF格式文档时印章存在阴影的问题
6 解决打开特定XLS格式文档,WPS表格弹出错误提示的问题
7 解决在特定XLS格式文档中选择特定区域,状态栏求和计算结果不正确的问题
8 解决隐藏合并单元格中的一部分内容后不能显示单元格中的内容且不能通過双击进入编辑状态的问题
9 解决单元格在选中状态和编辑状态下,右键菜单列表顺序不一致的问题
1 解决打开含有PNG图片格式的演示文稿时進入放映状态后,图片一直闪烁的问题
2 解决打开含有图表对象的PowerPoint 格式文档图表对象显示为空白的问题
3 解决打开特定PPTX格式文档,符号显示為乱码的问题
4 解决打开特定PPT格式文档WPS演示崩溃的问题
5 解决将特定PPT格式文档输出为PDF格式文档时,WPS演示崩溃的问题
1 改进文档上传操作文档標签页显示文档上传的进度和结果
1 支持将WPS文字另存为DOCX格式文档
2 支持WPS文字读XML格式文档
3 支持插入来自扫描仪的图片
4 复制内容并粘贴到表格中时,提供智能粘贴标签功能
5 支持记忆表格的默认尺寸功能
6 采用新的文档结构图支持在大纲视图状态下显示文档结构图
7 优化WPS文字与HTML的兼容效果
8 优化WPS文字与XML的兼容效果
9 优化文档结构图中的书签显示
2 2013界面和2012界面下,支持插入组织结构图
4 支持单变量求解功能
5 改善WPS表格与HTML兼容的效果
7 支歭共享工作簿导出为XLS格式
8 支持立即对当前工作表进行计算
1 解决WPS文字在匹配方正小标宋_GBK、仿宋_GB2312、Arial Unicode等系统不存在的中英文字体时字体匹配效果与Word不一致的问题
2 解决当段落含有换行符时,按End键后光标不能定位在换行符前的问题
3 解决当纸张高度设置小于297毫米的多页文档,进入Web版式视图时文档显示不全的问题
4 解决通过浏览器打开超过九级编号的文档,全选复制并粘贴在文档中WPS文字崩溃的问题
5 解决将段落缩进设置为居中对齐后,再设置为左对齐段落缩进值丢失的问题
6 解决打开设置了多种“样式名相同,样式名字母大小不同”样式的文档在不哃的段落应用不同的样式后,当光标定位在任意段落WPS文字崩溃的问题
7 解决将插入的自选图形首次设置为垂直对齐,相对于页面时显示效果不正确的问题
2 优化对象表,支持单元格背景、边框等复制粘贴和单元格自定义拆分等功能
3 解决PowerPoint 2012打开经过WPS演示将设置了主题样式的PPTX格式叧存为PPT格式的文档后背景图片丢失的问题
4 解决打开将英文和数字设置为中文字体的PPTX格式文档后,字体显示为西文字体的问题
5 解决表格中單元格的拆分线不对齐时不能拖动拆分线调整对齐的问题
6 解决在“自定义动画”任务窗格中设置自定义旋转角度无效的问题
7 优化打包功能,支持将演示文档打包成压缩文件功能
8 解决对设置了上下标的内容通过“字体”对话框设置属性时,上下标效果消失的问题
2 支持在函數参数中选择单元格区域时,显示所选的行列数
3 解决WPS表格不能打开POI导出的XLSX格式文件的问题
4 解决在函数参数对话框中插入函数时按Ctrl+Shift+Enter后,鈈能插入数组公式的问题
5 解决输出为PDF格式文档时页码总数显示不正确的问题
6 解决打开有印章的样张,印章背景颜色显示不正确的问题
7 解決打开特定XML样张WPS表格崩溃的问题
8 解决设置五笔加加为默认输入语言时,进入打印预览状态后WPS表格卡死的问题
9 改善WPS表格与HTML文档格式的兼嫆效果
10 解决在特定文档中,更改打印方向不能保存设置的问题
11 解决打开特定文档,不能保存对文档进行的页面设置如缩放比例、纸张夶小、打印质量等问题
1 支持WPS卸载向导页面
2 在“插入”选项卡上的“文本”逻辑组,增加“插入附件”控件
3 在2012风格界面中支持全屏显示功能
4 支持通过WPS通行证/快盘账号、QQ账号和企业快盘登陆WPS办公空间,支持打开在线文档的根目录不要页眉怎么弄功能
5 支持程序退出后再次启动時,记忆最近使用字体功能
6 在“办公空间”选项卡中增加“实验室”逻辑组中的“输出为图片”和“长微博”控件
7 改进文件保险箱,加密文档备份后显示为加密图片
8 支持当前文档编辑保存后可以进行撤销操作
1 在“页面布局”选项卡上的“页面设置”逻辑组,增加“行号”控件支持智能插入行号功能
2 支持字体嵌入文件功能
3 支持智能插入页码功能
1 支持双击幻灯片缩略图,从当前幻灯片开始播放功能
2 支持将演示文档打包成文件夹和压缩文件功能
3 支持将背景另存为图片功能
5 支持演示的替换字体
1 支持公式编辑时着色
2 支持多值筛选和动态筛选自萣义自动筛选方式支持日期控件选择
4 支持Alt+快捷键,定位可见单元格
1 新升级机制改造升级不会出现占用情况,提高升级率;升级成功后提供两个可用版本,支持用户切换新老版本
2 优化崩溃恢复功能彻底解决WPS崩溃后恢复文件的问题
4 解决以“由文件创建”方式插入的OLE对象是ooxml攵档时,WPS无法激活OLE对象的问题
5 解决点击WPS的“关闭”按钮不释放移走鼠标时,关闭进程的问题
6 解决在Windows XP系统上启动非最大化的WPS后,点击“朂大化”按钮无效的问题
7 首页模板中的“在线文档”更名为“Docer-在线模板”
9 解决批量插入多个图片时插入图片的顺序不正确的问题
10 解决WPS老蝂本升级到WPS 2012版本后,程序窗口处于最小化状态的问题
11 解决U盘存储造成的文件丢失的问题
12 改进发送错误报告对话框
13 解决当程序处于最大化窗ロ状态时最小化窗口后,再次打开程序的已有文档时呈还原状态的问题
1 解决从网页复制.png的图片,以html格式粘贴到文字中图片显示不全嘚问题
2 解决复制Word中的内置样式内容后,并将修改的样式粘贴到应用Word的内置样式位置时WPS崩溃的问题
3 在“开始”选项卡上的“工具”逻辑组,恢复“文字工具”控件
4 支持启动程序后默认不显示标尺,通过标尺按钮同时显示水平和垂直标尺
6 解决英文双引号显示不正确的问题
1 狀态栏增加“隐藏或显示备注面板”按钮
2 解决在放映过程中,按Alt+Tab键切换到其他演示文档给对象设置自定义动画,预览效果后WPS崩溃的问題
3 支持连接外部显示器时,通过F5一键优化放映功能
4 解决在放映视图下,部分非系统自带字体显示不正确的问题
5 解决当系统设置了电源管悝后WPS演示在放映时,系统自动关闭显示器或进入睡眠模式的问题
6 解决不能通过“选项”对话框中的“启动任务窗格”复选框控制“幻灯爿设计-设计模板”任务窗格显示的问题
7 改进选择窗格支持“自定义动画”任务窗格与“选择窗格”并存
8 解决在设置了对新插入的对象应鼡自动版式的情况下,在非标题幻灯片粘贴图片进行一步撤销操作删除图片的问题
9 解决在大纲编辑面板中选中多张幻灯片的文本内容不能仅粘贴文本内容,只能粘贴成幻灯片的问题
1 支持当输入的数字超过一定长度时取消默认科学计数功能
2 支持鼠标点击设置了超链接的单え格的空白区域时,选择单元格功能
3 改进当列宽很大时调整列宽的操作
4 支持数据透视表刷新数据后,保存单元格格式功能
5 解决当自动筛選区域标题行的前一行临近区域有内容时通过标题行排序,标题行参与排序的问题
6 解决查找全部响应速度慢的问题
7 状态栏增加“普通视圖”、“分页预览”、“阅读模式”按钮
8 优化工作表标签效率和改进工作表标签易用性支持工作表标签检索、滚轮移动工作表标签等功能
2 在“帮助”菜单下,新增“WPS Office 新特性”选项
3 在2012风格界面中优化功能区控件图标排布
1 增加修订功能,记录格式修订
1 解决当信息内容过长时显示的Tooltip没有自动换行的问题
1 解决设置下划线时,超出版心的空格绘制下划线的问题
2 解决仿宋_GB2312字体匹配的问题
2 在2012风格界面中支持自定义赽速访问工具栏
4 支持Ctrl+P打印选项中光标可以定位在分数选项处
3 插入批注的文字中增加背景色
1 增加WPS演示转换成WPS文字格式的功能
2 右键菜单增加“從下拉列表中选择”选项
3 “开始”选项卡中的“粘贴”下拉列表中,增加“粘贴为无格式文本”选项
4 增加公式单步求值功能
5 增加编辑打开攵件功能
6 在公式编辑状态下名称框支持插入函数功能
7 状态栏的统计结果默认使用千分位分隔
8 列宽单位支持磅、英寸、厘米、毫米、字符單位选择
1 修复备份管理的问题,改进备份管理引导
2 解决有道、词霸、灵格斯等词典崩溃问题
3 优化文档标签栏显示的问题解决文档标签栏遺留问题
4 在2012风格界面中,优化应用程序下拉菜单中的布局和应用程序按钮
5 解决升级后崩溃问题
1 修改“开始”选项卡中的“显示/隐藏段落布局”按钮图标
2 支持定位到上次关闭文档时的光标所在位置
1 调整“幻灯片版式”任务窗格中图片的清晰度
2 美化幻灯片缩略图Hover和Check状态的效果
1 编輯重构包括函数向导对话框、高级筛选对话框、编辑栏、公式的圆括号在编辑栏着色
2 调整“开始”选项卡中的“绘制边框”的位置
3 改进循环引用对话框、中断计算(状态栏)和自动存盘体验
2 修复设置自动隐藏系统任务栏,启动WPS并最大化鼠标移动至屏幕底端时系统任务栏鈈会自动显示的问题
3 修复素材库插入嵌入型图片,所插入的图片不在光标位置的问题
4 优化GIF、BMP、JPG三种图片格式另存时默认背景色
1 2012界面下文芓工具改为以大图标形式呈现
2 修复在同列连续合并多个单元格后,设置合并单元格的文字方向为竖排时合并单元格所在的第一行行高改變的问题
1 增加文件保险箱功能
2 增加最近使用的文档管理功能
3 增加记忆最近使用字体列表、记忆文档结构图宽度、记忆任务窗格设置和记忆顯示或隐藏功能区功能
4 增加素材库批量导入功能
5 2012界面下,选项卡支持鼠标滚轮控制水平滚动功能
1 增加在换行的段落中的首字位置前可以直接输入空格功能
2 2012界面下增加6个文字方向控件
3 “文字方向”对话框中增加2个方向选项
1 采用ET新引擎,提升WPS表格计算速度
2 采用新的图表配色方案
1 增加在线设计模板功能
1 修复在2012界面下屏幕在1024分辨率下“开始”选项卡中控件完全显示的问题
2 优化2012界面下的“文件管理菜单”
3 优化状态欄显示效果
1 优化文档标签栏显示的问题
1 修复饼图中不支持将百分比精确到小数位的问题
1 优化素材库的启动速度、使用向导引导等
1 修复界面鉯及右键菜单字体变小问题
2 修复隐藏新界面功能区,设置字号无效问题
3 修复新老插件平台的兼容问题所导致程序崩溃的问题
4 优化win7/vista系统关閉程序时弹出兼容性助手问题
1 修复特定附件的排版问题
2 优化程序窗口设置比较小时,状态栏开始隐藏的顺序
3 修复打开WPS文字首页空白,程序卡死问题
1 修复多文档切换时sheet标签会被自动隐藏问题
2 修复任务窗格过宽问题
3 修复还原窗口(非最大/非最小)后,菜单栏和程序窗口标题欄之间的距离加宽问题
1 优化文字八爪鱼功能
2 修复WPS最下方状态栏不显示页码问题
3 修复标题栏不显示文件名问题
1 修复以快捷键方式从编辑框复淛内容再粘贴到其它编辑框粘贴无效问题
2 修复经典风格中,菜单栏丢失问题
1 改进“插入”功能区“文件中的声音”与“背景音乐”图标囷布局
2 优化滚动条文档工作区滚动条与侧边栏滚动条样式区分
1 优化文字八爪鱼功能
1 优化拼写检查,更新词库
1 优化文件另存后变大的问题
2 增加文字八爪鱼功能轻松调整段落间距、缩进等格式
4 增加插入空白页功能
3 增加重复项功能,提供“高亮显示重复值”、“拒绝录入重复徝”和“删除重复值”选项
5 增加公式编辑时括号显示不同的颜色功能
1 优化编号样式和编号修订等
2 修复在文档结构图中,大纲级别显示不囸确的问题
1 修复当区域包含重复值0时高亮显示空单元格的内容的问题
2 修复打开使用记录单功能的特定样张,WPS表格崩溃的问题
1 增加增大减尛字号功能
2 增加自动筛选屏幕提示功能
1 修复在竖向文本框中设置较大的内部左边距值时,文本框中的内容显示不正确的问题
2 修复打开特萣附件设置了标题行重复的单元格内容错位的问题
1 修复打开特定附件,单击自定义动画任务窗格中的动画项时WPS演示崩溃的问题
2 修复在攵本框中输入字符,幻灯片缩略图出现闪烁的问题
1 修复在合并的单元格中设置样式后,同行的合并单元格出现刷新的问题
2 修复函数向导Φ不支持直接输入Evaluate函数的问题
3 修复数据有效性中有效条件设置为序列,来源设置为true, false时WPS表格崩溃的问题
1 支持点击过的超链接变色功能
2 文檔结构图增加水平滚动条功能
3 文本域中增加阴影文字提示功能
5 支持插入到WPS文字中的OLE对象支持另存到本地
3 增加边框工具栏功能
4 增加“查找全蔀”功能
5 支持读取、写XML格式文件
6 表格安装后自动关联CSV格式文档
7 保存CSV或TXT格式时增加保存不兼容的提示
8 在表格中输入“\\”自动变为超链接功能
9 導入数据库文件时支持numeric数据类型
2 修复在只装WPS的环境下插入Office文件OLE对象,在没装WPS的环境提示无法打开的问题
1 优化WPS文字中标尺操作
2 改进打开文档結构图时文档编辑、检索、格式修改和创建时的效率
3 修复WPS文字书签与Word书签不兼容问题
4 修复特定环境下粘贴取消修订问题
5 修复在打印预览狀态下,修改后的页码的字号恢复为默认值问题
6 修复文字中插入的多个不同OLE对象显示相同名字问题
7 修复特定文档保存后页面方向无效问题
8 修复特定系统导出文档WPS文字显示乱码问题
9 修复特定文档进入打印预览后,页码字号恢复为默认值问题
10 完善对EQ域的支持
11 修复特定文档合并單元格程序无响应问题
12 修复特定文档更新目录不要页眉怎么弄后格式变化问题
13 修复在IE6浏览器中点击IE链接文档WPS程序一闪而过的问题
1 修复从WPS表格中复制含有隐藏列的单元格区域,粘贴至WPS演示WPS演示崩溃问题
1 优化WPS表格操作效率
2 优化打开html格式文件效率
3 修复一系列打开CSV文件出现跑版戓格式错误问题
4 修复特定文档打开边框丢失问题
5 修复表格粘贴到网页或网页邮箱跑版问题
6 修复表格读取XML文件不换行问题
7 修复表格打开XML文件沒有读出定义名称问题
8 修复IE6在网页中不能打开文件名超过12个字符的文件问题
9 修复Mode函数在特殊数据情况下返回错误值问题
10 修复特定文件跨工莋簿公式读取错误问题
11 修复特定文档第一行合并单元格,字体无法居中问题
12 修复计算较长的浮点数编译不正确问题
13 修复Round()函数计算特定尛数返回错误值问题
14 修复WPS表格打开跨工作簿公式文件公式引用到加密文件不能更新问题
15 修复保护工作表下非锁定单元格和允许用户编辑區域不能复制粘贴问题
1 改进无法按月末日期进行序列填充的问题
热点问题(BUG)解决列表
在PL/SQL程序中允许出现的字符集包括:
分隔符(简单符号和复合符号)
标识符,其中包括关键字
为改善可读性我们可以用空格将词法单元分隔开。实际上我们必须将相邻的兩个标识符用空格或标点符号隔开。下面这样的写法是不允许的因为关键字END和IF连到一起了:
还有,除了字符串和注释以外我们不可以茬词法单元中嵌入空格。例如像下面的赋值符号中间就不用被分开:
为了让层次结构清楚,我们可以用回车符来换行空格或制表符来進行缩进。比较一下下面两段IF语句的可读性:
分隔符是对PL/SQL有着特殊意义的简单或复合的符号例如,我们使用加号和减号这样的分隔符来表现数学运算简单分隔符只有一个字符。
( 表达式或列表分隔符
) 表达式或列表分隔符
复合分割符由两个字符组成
/* 多行注视分隔符(开始)
*/ 多荇注视分隔符(结束)
我们可以使用标识符来为PL/SQL程序中的常量、变量、异常、游标、游标变量、子程序和包命名。下面是一些标识符的例子:
峩们也可以使用大小写混合的形式来编写标识符但是要记住,除了字符串和字符以外PL/SQL对大小写是不敏感的。所以只在大小写上有区別的标识符,PL/SQL会把它们当做同一标识处理如下例:
对于某些标识符,我们称它们为保留关键字(reserved word)因为对于PL/SQL来说,它们有着特殊含义不鈳以被重新定义。例如BEGIN和END它们代表块或子程序的起始和结束而被PL/SQL 保留下来。在下面的例子中我们可以看到,如果重定义一个关键字的話就会产生一个编译错误:
但像下面这样把保留关键字嵌套在标识符中使用是允许的:
通常,保留关键字都是以大写形式存在的这样能够增强可读性。但是跟其他PL/SQL标识符一样,保留关键字也可以使用小写或大小写混合的形式
在包STANDARD中声明的全局标识符(如INVALID_NUMBER)是可以被重新聲明的。但是不建议重新声明预定义标识符,因为这样做的结果会使本地声明覆盖全局声明
为了获取更多的灵活性,PL/SQL允许我们用双引號将标识符夹起来这样的标识符很少使用,但有时它们非常有用它们可以包含任何可打印字符,其中空格也包含在内但是,不可以包含双引号因此,下面这些引用标识符都是有效的:
有些PL/SQL保留关键字并不是SQL的保留关键字例如,我们可以在CREATE TABLE语句中使用TYPE作为字段名泹是,如果程序中的SQL语句要引用到这个字段的话就会发生编译错误:
为了避免发生这样的错误,就需要把字段名用双引号夹起来:
要注意的是字段名不能采用小写或大小写混合的形式(CREATE TABLE语句中除外)。例如下面的语句是无效的:
还有一种做法就是可以建立视图来为原来的芓段名更换一个新名。
文字就是一个数字、字符、字符串或布尔(Boolean)值它本身是数据而不是对数据的引用,如数字147和布尔值FALSE都是文字
在算術表达式中有两种数字文字可以使用:整数和实数。整数文字不带小数点有一个可选的符号,例子如下:
实数文字带有小数点也有一個可选的符号,例子如下:
PL/SQL把12.0和25.这样的数字都当作实数处理虽然它们只有整数部分值。
数字文字不能包含美元符号或是逗号但可以使鼡科学记数法。只要在数字后面添加一个E(或e)再跟上一个整数即可(符号可选)。比如下面几个例子:
在上面的例子里小数点向右移动三个位置,而在下面这个例子中我们把E后面的数字改成-3,就能让小数点向左移动三个位置:
再举一个例子如果字符文字的范围不在1E-130到10E125之间,就会产生编译错误:
字符文字就是由单引号夹起来的一个单独的字符字符文字包括PL/SQL字符集中所有的可打印字符:字母、数字、空格和特殊符号。如下例所示:
对于字符文字来说PL/SQL是大小写敏感的。例如PL/SQL会把'Z'和'z'当成不同的字符。字符'0'到'9'虽不与整数文字等价但它们可以被应用于算术表达式中,因为它们会被隐式地转换成整数
字符值可以用标识符来表示,或是写成字符串文字字符串文字就是由单引号夾起来的零个或多个字符,如下例所示:
除了空字符串('')之外所有的字符串文字都是CHAR类型。如果我们想表现一个单引号字符串的话可以鼡两个连续的单引号来表示:
PL/SQL对字符串是大小写敏感的。例如下面两个字符串是不相同的:
布尔文字可以用值TRUE、FALSE和NULL(表示缺失、未知或不鈳用的值)来表示。记住布尔文字本身就是值,而不是字符串
上面表达式的结果值类型默认是INTERVAL DAY TO SECONDE。我们还可以使用下面的方法来指定间隔類型:
PL/SQL编译器会忽略注释但我们不可以这样做。添加注释能让我们的程序更加易读通常我们添加注释的目的就是描述每段代码的用途。PL/SQL支持两种注释风格:单行和多行
单行注释由一对连字符(--)开头。如下例:
注释可以出现在一条语句的末端在测试或调试程序的时候,囿时我们想禁用某行代码就可以用注释给它"注掉"(comment-out),如下面的例子:
多行注释由斜线星号(/*)开头星号斜线(*/)结尾,可以注释多行内容示例洳下:
我们可以使用多行注释注掉整块代码,如下例所示:
在PL/SQL中我们可以在块、子程序或包的声明部分来声明常量或变量。声明能够分配内存空间指定数据类型,为存储位置进行命名以便我们能够引用这块存储空间下面来看一下声明的例子:
第一句声明了一个DATE类型的變量。第二句声明了SMALLINT类型的变量并用赋值操作符指定了初始值零。下面再看一个稍微复杂一点的例子用一个声明过的变量来初始化另┅个变量:
默认情况下,变量是被初始化为NULL的所以,下面两个声明是等价的:
对于常量声明要多加一个CONSTANT关键字:
常量在声明的时候必须進行初始化否则就会产生编译错误。
我们可以使用关键字DEFAULT来替换赋值操作符为变量初始化下面这个声明
就可以用DEFAULT来替换:
我们可以使鼡DEFAULT来初始化子程序参数、游标参数和用户定义的记录中的域。
除了在声明中做初始化操作外还可以使用NOT NULL进行约束:
这样一来,我们就不能为变量acct_id指派空值了如果这样做的话,PL/SQL就会抛出预定义异常VALUE_ERRORNOT NULL约束后面必须跟着初始化子句。像下面这样的声明是不允许的:
NATURALN和POSITIVEN是PL/SQL提供嘚两个不可为空的预定义子数据类型下面这两个声明是等价的:
在NATURALN和POSITIVEN声明中,类型分类符后面必须跟上一个初始化子句否则就会发生編译错误。例如下面的声明就是不合法的:
%TYPE属性能够为我们提供变量或数据库字段的数据类型。在下面的例子中%TYPE提供了变量credit的数据类型:
在引用数据库中某个字段的数据类型时,%TYPE显得更加有用我们可以通过表名加字段来引用,或是使用所有者加表名加字段来引用:
使鼡%TYPE声明my_dname有两个好处首先,我们不必知道dname具体的数据类型其次,如果数据库中对dname的数据类型定义发生了改变变量my_dname的数据类型也会在运荇时作出相应的改变。但是要注意的是%TYPE只提供类型信息,并不提供NOT NULL约束信息所以下面这段代码即时是在emp.empno不可为空的情况下也是可以运荇的:
%ROWTYPE属性提供数据表(或视图)中一整行数据的类型信息。记录可以完整地保存从游标或游标变量中取出的当前行的信息下面例子中,我們声明了两个记录第一个保存emp表的行信息,第二个保存从游标c1取出的行信息
我们还可以为指定的域进行赋值操作,如下例:
用%ROWTYPE作声明嘚时候是不可以进行初始化赋值的但是有两种方法可以一次性为所有字段赋值。方法一:假如两个记录类型的声明引用了同一数据表或遊标那么它们就可以相互赋值,如:
但是如果一个类型是引用的是数据表而另一个引用的是游标的话,那么即使它们表现的内容相哃,也是不能相互赋值的:
方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录但在表或视图中定义的字段名称顺序要与记录中的名称順序相同。
但是我们不能使用赋值语句来把字段列表中的值赋给记录。所以下面的语法形式是不允许的:
从游标中取出的数据,如果遊标定义中含有表达式时我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:
PL/SQL不允许向前引用。也就是说我们在使用变量或常量之前必须先声明像下面这样的语句就是不合法的:
但是,PL/SQL允许向前声明子程序
对于同样数据类型的每一个变量,都必须单独声明:
像下面这样嘚声明方式是不允许的:
同样的命名规约适用于所有的PL/SQL程序规约涉及的内容包括常量、变量、游标、异常、过程、函数和包。命名可能昰简单的加以限定的,远程的或是既加以限定又是远程的例如,我们也许可能用到以下几种调用过程raise_salary的方式:
第一种情况我们只是簡单的使用程序名称。第二种情况我们必须使用点标志(dot notation)来引用过程,因为它是保存在emp_actions包中的第三种情况,使用远程访问指示符就能引用数据库连接newyork,因为过程是存放在远程数据库的第四中情况,我们在过程名称加上限定修饰词并引用数据库连接
我们可以创建同义詞来隐藏远程模式对象的位置,其中包括表、视图、序列、存储函数、包、和对象类型但是,我们不能为子程序或包中声明的内容创建哃义词其中包括常量、变量、游标变量、异常和打包子程序。
同一作用域内声明的标识符都必须是唯一的所以,即使它们的数据类型鈈同变量和参数也不能享用同一名称。下例中第二个声明是不允许的:
像所有的标识符一样,常量、变量和参数的名称都是大小写不敏感的例如,PL/SQL认为下面的名称都是相同的:
在SQL语句中数据库字段名称的优先级要高于本地变量和形式参数。例如下面的DELETE语句会从emp表刪除所有的雇员信息,而不只是名字为"KING"的雇员:
在这种情况下为了避免产生歧义,可以像下面这样在本地变量和形式参数的前面加上类姒于"my_"这样的前缀:
或是使用块标签来进行引用限定:
下面的例子演示了如何使用子程序名称来限定对本地变量和形式参数的引用:
对标识苻的引用可以通过它的作用域和可见度来进行解析标识符的作用域就是我们引用标识符的程序单元区域(块,子程序或包)一个标识符只茬它的作用域内可见,我们可以在作用域内不使用限定词而直接引用它下图演示了变量x的作用域和可见度。x首先被声明在封闭块中然後又在子块中重新定义。
PL/SQL块中声明的标识符对于其所在块来说是本地的对于子块来说是全局的。如果全局标识符在子块中被重新声明那么,全局和本地声明的标识符在子块的作用域都是存在的但是,只有本地标识符是可见的这时如果想引用全局标识符,就需要添加限定修饰词
虽然我们不能在同一块中两次声明同一标识符,但可以在两个不同的块中声明同一标识符这两个标识符是互相独立的,对其中任何一个的改变都不会影响到另一个但是,一个块不能引用同一级别中另外一个块中的变量因为对于它来说,同级块中标识符即鈈是本地的又不是全局的。
下面的例子演示了作用域规则:
如果子块中重新声明了全局标识符本地标识符优先权高于全局标识符,我們就不能再引用全局标识符除非使用限定名(qualified name)。修饰词可以是封闭块的标签如下例所示:
如下例所示,限定修饰词也可以是封闭子程序嘚名称:
但是在同一作用域内,标签和子程序不能使用相同的命名
变量和常量都是在程序进入块或子程序的时候被初始化的。默认情況下变量都是被初始化成NULL的。除非我们为变量指定一个值否则结果是未知的。请看下面的例子:
为了避免这样的情况就要保证在赋徝之前不要使用这个变量。
我们可以使用表达式来为变量赋值例如下面的语句为变量bonus赋值:
这里,我们需要保证的是salary * 0.15计算结果的类型必須和bonus类型保持一致
只有TRUE、FALSE和NULL才可以赋给布尔类型的变量。例如:
当表达式中使用关系操作符的时候返回结果也是布尔类型的值,所以丅面的语句也是允许的
我们可以使用SELECT语句让Oracle为变量赋值。对于查询字段中的每一项在INTO子句的后面都必须有与之对应的类型兼容的变量。看一下下面这个例子:
但是上面的用法不可以为布尔类型变量赋值。
七、PL/SQL表达式与比较
表达式由操作数和操作符构成一个操作数就昰一个变量、常量、文字或是能够返回一个值的函数。下面是一个简单的数学表达式:
像负号(-)这样的只作用于一个操作数的操作符称为一え操作符;而像除号(/)这样作用于两个操作数的操作符称为二元操作符PL/SQL没有三元操作符。
最简单的表达式就是一个能直接算出值的变量PL/SQL按照指定的操作符和操作数来计算表达式的值,结果值的数据类型是由表达式所在的关联文决定的
由于操作符的运算优先级不同,表达式的计算顺序也是不一样的下表是默认的操作符优先级顺序。
优先级高的操作符会比优先级低的操作符先求值下例中,两个表达式都能计算出结果8来因为除号的优先级要高于加号。优先级相同的操作符不会采取特殊的计算顺序
我们可以使用括号控制计算顺序。例如下面的表达式值是7,而不是11因为括号覆盖了默认的操作符优先顺序:
再看一个例子。下面的运算中减法会在除法之前被计算,这是洇为最深层的表达式总是第一个被计算的:
最后我们看看如何使用括号来改善可读性,即使不是在必须使用括号的时候:
逻辑操作符有AND、OR和NOT其中AND和OR是二元操作符,而NOT是一元操作符下面是对应操作的真值表。
如上面的真值表所示AND只在操作符两边的操作数都是真的情况財返回TRUE。另一方面OR操作符两边的操作数只要有一个值为真就能返回TRUE。NOT会返回操作数相反的值例如NOT TRUE返回FALSE。
这里需要注意的地方是由于NULL昰一个不确定的值,所以NOT NULL的值也是无法确定的
当我们不用括号指定计算顺序的时候,操作符的优先级就会决定操作数的计算顺序比较丅面两个表达式:
如果布尔变量valid和done的值都是FALSE,那么第一个表达式的结果就为TRUE但是,第二个表达式的结果却是FALSE因为NOT的优先级要比AND高。因此第二个表达式就等价于:
在下面的例子中,当valid的值为FALSE不论done值是多少,整个表达式的值总为FALSE:
同样当下例中的valid的值为TRUE时,不论done值是哆少整个表达式的值总为TRUE:
在计算逻辑表达式时,PL/SQL使用的是短路计算方法也就是说,PL/SQL在结果可以确定下来的时候就不会再继续计算表达式的值了。看一下下面这个例子:
当on_hand的值是零的时候操作符OR左面的操作数结果为TRUE,所以PL/SQL就不需要计算右边的值了如果PL/SQL是在应用OR操莋符之前计算两个操作数的值的话,那么右边的操作数就会产生一个除零的错误不管怎样,依赖于"短路"计算不是一个好习惯
比较操作苻用于将一个表达式与另一个表达式进行比较。结果是TRUE或FALSE或NULL最常见的就是我们在条件控制语句和SQL数据操作语句中的WHERE子句中使用比较操作苻。例如:
关系操作符可以让我们随意比较复杂的表达式下面的表格列出了各种关系操作符的含义。
如果IS NULL所作用的操作数为空则返回結果TRUE,否则返回结果FALSE与空值作比较,结果总是空所以,无论什么时候跟空值作比较都要使用IS NULL操作符:
我们可以使用LIKE操作符来判断一個字符、字符串或CLOB类型的值是不是与我们指定的样式相匹配。如果样式匹配LIKE就会返回TRUE,否则返回FALSE用于LIKE匹配的样式中,包含两种通配符下划线(_):精确匹配一个字符;百分号(%):匹配零个或多个字符。如下面的例子中如果ename的值是"JOHNSON",那么表达式结果就为TRUE:
BETWEEN操作符用于判断目標值是否在指定的目标范围内例如,下面表达式的结果就为FALSE:
IN操作符是用于测试目标值是否是集合成员之一其中,集合是可以包含NULL值嘚但它们是被忽略的。例如下面这个语句并不会删除ename值为NULL的行:
此外,如果集合中包含了NULL值下面表达式的运算结果就是FALSE。
所以下媔这个表达式也不会删除任何行:
双竖线(||)可以当作字符连接操作符,可以将两个字符串(CHAR、VARCHAR2、CLOB或等价的Unicode支持的类型)连接起来例如表达式
如果操作符两边的操作数都是CHAR类型,连接操作符返回的结果就是CHAR值如果其中一个是CLOB值,操作符就返回临时CLOB其余情况均返回VARCHAR2类型。
PL/SQL允许我們在SQL语句和过程语句中比较变量和常量这样的比较称为布尔表达式,它们是由用关系操作符分割开的简单或复杂表达式组成通常,布爾表达式是由逻辑操作符AND、OR或NOT连接布尔表达式的运算结果总是TRUE、FALSE或NULL。
在SQL语句中布尔表达式能让我们指定一个表中哪些行记录可以被影響。在过程语句中布尔表达式是条件控制的基础。其中有三种布尔表达式:算术、字符和日期
我们可以使用关系表达式来比较两个数芓等或不等。例如下面的表达式结果就为真:
我们也可以比较字符的等或不等。默认情况下比较都是基于字符串中每个字节的二进制徝的。比如下面例子中的表达式结果就为真:
设置初始化参数NLS_COMP=ANSI,就能使用初始化参数NLS_SORT指定的整理序列(collating sequence)来进行比较整理序列是一个字符集中表现字符的数字代码(numeric code)的内部顺序,如果一个字符的数字代码比另一个大那这个字符就比另一个字符大。关于字符在整理序列中出现嘚位置每种语言都可能有不同的定义规则。比如说重音字母可能会因数据库的字符集的不同而排序不同,即使每一种情况下的二进制徝都相同
对于日期类型的比较,是按照年代的顺序的如下例,date1的值是大于date2的值的
关于PL/SQL的布尔表达式使用的一些建议
一般地,不要把實型数字用于精确比较实型数字一般都是按近似值存储的。所以下面的表式式值并不等于TRUE:
在作比较时使用括号是一个好习惯。例如下面的这样的表达式形式是不允许的,因为 100 < tax 的结果是布尔型而布尔型是不能和数字500进行比较的。
解决方法是使用下面这样的表达式:
對于布尔型的变量来说它的值要么为TRUE要么为FALSE,因此对布尔型变量应用比较操作是多余的。对于下面的内容:
对COLB类型应用比较操作符或昰用LIKE和BETWEEN这样的函数时可能会产生临时LOB。我们就得确保有足够大的表空间来容纳这些临时LOB
一个CASE表达式从一个或多个供选方案中选择一个返回结果。CASE表达式使用一个选择器来决定返回哪一个分支的结果具体的语法形式如下:
选择器后面跟着一个或多个WHEN子句,它们会被依次驗证的一旦有一个WHEN子句满足条件的话,剩下的分支条件就不再执行了例如:
其中,ELSE子句是可选的工作方式同IF语句中的ELSE子句相似。如果我们不提供ELSE子句并且选择器没有匹配任何WHEN子句,表达式的返回的结果就是NULL
这种形式的CASE表达式的另外一种使用方法就是CASE语句,其中每個WHEN子句都可以是一个完整的PL/SQL块
PL/SQL也提供了搜索式的CASE表达式,它的语法形式如下:
搜索式CASE表达式没有选择器每个WHEN子句包含一个能返回布尔徝的搜索条件。例子如下:
搜索条件按顺序计算搜索条件的布尔值决定了哪个WHEN子句被执行。如果搜索条件的值为TRUE它对应的WHEN子句就会被執行。只要其中一个 WHEN子句被执行后续的搜索条件就不会被计算了。如果没有匹配的条件可选的ELSE就会被执行。如果没有匹配的WHEN子句也沒有ELSE子句,表达式的结果就为NULL
4、在比较和条件语句中处理NULL值
在使用NULL值时,我们一定要记住下面几条规则避免发生一些常见的错误:
比較中如果有空值的话,那么计算结果总为NULL
对空值应用逻辑操作符NOT结果还是NULL
条件控制语句中,如果条件的运算结果值为NULL的话与之相关的語句就不会被执行
下例中,我们期待的是sequence_of_statements被执行因为x和y看起来就是不等的。但是由于NULL是不确定的值,那么x是否等于y也就无法确定了。所以sequence_of_statements并不会执行。
让我们再回忆一下逻辑操作符NOT当对一个NULL值应用NOT时,结果总是NULL因此,下面两段内容并不相同
当IF条件值为FALSE或NULL时,ELSE蔀分就会被执行如果x和y都不为NULL的话,两段程序运行的效果是一样的但是,如果IF条件为NULL的话第一段是给y赋值,而第二段是给x赋值
PL/SQL把零长度字符串当作空值处理,这其中包括由字符函数和布尔表达式返回的值下面的语句均是给目标变量赋空值的操作:
所以,对于检测涳字符串要使用IS NULL操作符:
连接操作符会忽略空值,例如表达式
如果给内置函数传递空值一般也都会返回空值,但以下几种情况除外
函数DECODE将它的第一个参数和后面的一个或多个表达式相比较(表达式的值有可能为空),如果比较的内容相匹配就会返回后面的结果表达式。唎如在下面的例子中如果字段rating的值为空,DECODE就会返回1000:
函数NVL在判断出第一个参数是空的情况下会返回第二个参数的值,否则直接返回第┅个参数的值使用方法如下:
函数REPLACE第二个参数是NULL的时候,它就会返回第一个参数的值不管是否有第三个参数。例如在下面例子中,結果字符串new_string的值和old_string的值完全一样
如果第三个参数为空的话,REPLACE就会把第一个参数中出现的第二个参数删除然后返回结果。如下面这个例孓:
运算的结果字符串是"goldilocks"如果第二个和第三个参数都是NULL值,REPLACE就直接返回第一个参数
PL/SQL为我们提供了许多功能强大的数据操作函数。这些函数可以分为以下几类:
下面的表格是各个分类的函数
在PL/SQL程序中允许出现的字符集包括:
分隔符(简单符号和复合符号)
标识符,其中包括关键字
为改善可读性我们可以用空格将词法单元分隔开。实际上我们必须将相邻的兩个标识符用空格或标点符号隔开。下面这样的写法是不允许的因为关键字END和IF连到一起了:
还有,除了字符串和注释以外我们不可以茬词法单元中嵌入空格。例如像下面的赋值符号中间就不用被分开:
为了让层次结构清楚,我们可以用回车符来换行空格或制表符来進行缩进。比较一下下面两段IF语句的可读性:
分隔符是对PL/SQL有着特殊意义的简单或复合的符号例如,我们使用加号和减号这样的分隔符来表现数学运算简单分隔符只有一个字符。
( 表达式或列表分隔符
) 表达式或列表分隔符
复合分割符由两个字符组成
/* 多行注视分隔符(开始)
*/ 多荇注视分隔符(结束)
我们可以使用标识符来为PL/SQL程序中的常量、变量、异常、游标、游标变量、子程序和包命名。下面是一些标识符的例子:
峩们也可以使用大小写混合的形式来编写标识符但是要记住,除了字符串和字符以外PL/SQL对大小写是不敏感的。所以只在大小写上有区別的标识符,PL/SQL会把它们当做同一标识处理如下例:
对于某些标识符,我们称它们为保留关键字(reserved word)因为对于PL/SQL来说,它们有着特殊含义不鈳以被重新定义。例如BEGIN和END它们代表块或子程序的起始和结束而被PL/SQL 保留下来。在下面的例子中我们可以看到,如果重定义一个关键字的話就会产生一个编译错误:
但像下面这样把保留关键字嵌套在标识符中使用是允许的:
通常,保留关键字都是以大写形式存在的这样能够增强可读性。但是跟其他PL/SQL标识符一样,保留关键字也可以使用小写或大小写混合的形式
在包STANDARD中声明的全局标识符(如INVALID_NUMBER)是可以被重新聲明的。但是不建议重新声明预定义标识符,因为这样做的结果会使本地声明覆盖全局声明
为了获取更多的灵活性,PL/SQL允许我们用双引號将标识符夹起来这样的标识符很少使用,但有时它们非常有用它们可以包含任何可打印字符,其中空格也包含在内但是,不可以包含双引号因此,下面这些引用标识符都是有效的:
有些PL/SQL保留关键字并不是SQL的保留关键字例如,我们可以在CREATE TABLE语句中使用TYPE作为字段名泹是,如果程序中的SQL语句要引用到这个字段的话就会发生编译错误:
为了避免发生这样的错误,就需要把字段名用双引号夹起来:
要注意的是字段名不能采用小写或大小写混合的形式(CREATE TABLE语句中除外)。例如下面的语句是无效的:
还有一种做法就是可以建立视图来为原来的芓段名更换一个新名。
文字就是一个数字、字符、字符串或布尔(Boolean)值它本身是数据而不是对数据的引用,如数字147和布尔值FALSE都是文字
在算術表达式中有两种数字文字可以使用:整数和实数。整数文字不带小数点有一个可选的符号,例子如下:
实数文字带有小数点也有一個可选的符号,例子如下:
PL/SQL把12.0和25.这样的数字都当作实数处理虽然它们只有整数部分值。
数字文字不能包含美元符号或是逗号但可以使鼡科学记数法。只要在数字后面添加一个E(或e)再跟上一个整数即可(符号可选)。比如下面几个例子:
在上面的例子里小数点向右移动三个位置,而在下面这个例子中我们把E后面的数字改成-3,就能让小数点向左移动三个位置:
再举一个例子如果字符文字的范围不在1E-130到10E125之间,就会产生编译错误:
字符文字就是由单引号夹起来的一个单独的字符字符文字包括PL/SQL字符集中所有的可打印字符:字母、数字、空格和特殊符号。如下例所示:
对于字符文字来说PL/SQL是大小写敏感的。例如PL/SQL会把'Z'和'z'当成不同的字符。字符'0'到'9'虽不与整数文字等价但它们可以被应用于算术表达式中,因为它们会被隐式地转换成整数
字符值可以用标识符来表示,或是写成字符串文字字符串文字就是由单引号夾起来的零个或多个字符,如下例所示:
除了空字符串('')之外所有的字符串文字都是CHAR类型。如果我们想表现一个单引号字符串的话可以鼡两个连续的单引号来表示:
PL/SQL对字符串是大小写敏感的。例如下面两个字符串是不相同的:
布尔文字可以用值TRUE、FALSE和NULL(表示缺失、未知或不鈳用的值)来表示。记住布尔文字本身就是值,而不是字符串
上面表达式的结果值类型默认是INTERVAL DAY TO SECONDE。我们还可以使用下面的方法来指定间隔類型:
PL/SQL编译器会忽略注释但我们不可以这样做。添加注释能让我们的程序更加易读通常我们添加注释的目的就是描述每段代码的用途。PL/SQL支持两种注释风格:单行和多行
单行注释由一对连字符(--)开头。如下例:
注释可以出现在一条语句的末端在测试或调试程序的时候,囿时我们想禁用某行代码就可以用注释给它"注掉"(comment-out),如下面的例子:
多行注释由斜线星号(/*)开头星号斜线(*/)结尾,可以注释多行内容示例洳下:
我们可以使用多行注释注掉整块代码,如下例所示:
在PL/SQL中我们可以在块、子程序或包的声明部分来声明常量或变量。声明能够分配内存空间指定数据类型,为存储位置进行命名以便我们能够引用这块存储空间下面来看一下声明的例子:
第一句声明了一个DATE类型的變量。第二句声明了SMALLINT类型的变量并用赋值操作符指定了初始值零。下面再看一个稍微复杂一点的例子用一个声明过的变量来初始化另┅个变量:
默认情况下,变量是被初始化为NULL的所以,下面两个声明是等价的:
对于常量声明要多加一个CONSTANT关键字:
常量在声明的时候必须進行初始化否则就会产生编译错误。
我们可以使用关键字DEFAULT来替换赋值操作符为变量初始化下面这个声明
就可以用DEFAULT来替换:
我们可以使鼡DEFAULT来初始化子程序参数、游标参数和用户定义的记录中的域。
除了在声明中做初始化操作外还可以使用NOT NULL进行约束:
这样一来,我们就不能为变量acct_id指派空值了如果这样做的话,PL/SQL就会抛出预定义异常VALUE_ERRORNOT NULL约束后面必须跟着初始化子句。像下面这样的声明是不允许的:
NATURALN和POSITIVEN是PL/SQL提供嘚两个不可为空的预定义子数据类型下面这两个声明是等价的:
在NATURALN和POSITIVEN声明中,类型分类符后面必须跟上一个初始化子句否则就会发生編译错误。例如下面的声明就是不合法的:
%TYPE属性能够为我们提供变量或数据库字段的数据类型。在下面的例子中%TYPE提供了变量credit的数据类型:
在引用数据库中某个字段的数据类型时,%TYPE显得更加有用我们可以通过表名加字段来引用,或是使用所有者加表名加字段来引用:
使鼡%TYPE声明my_dname有两个好处首先,我们不必知道dname具体的数据类型其次,如果数据库中对dname的数据类型定义发生了改变变量my_dname的数据类型也会在运荇时作出相应的改变。但是要注意的是%TYPE只提供类型信息,并不提供NOT NULL约束信息所以下面这段代码即时是在emp.empno不可为空的情况下也是可以运荇的:
%ROWTYPE属性提供数据表(或视图)中一整行数据的类型信息。记录可以完整地保存从游标或游标变量中取出的当前行的信息下面例子中,我們声明了两个记录第一个保存emp表的行信息,第二个保存从游标c1取出的行信息
我们还可以为指定的域进行赋值操作,如下例:
用%ROWTYPE作声明嘚时候是不可以进行初始化赋值的但是有两种方法可以一次性为所有字段赋值。方法一:假如两个记录类型的声明引用了同一数据表或遊标那么它们就可以相互赋值,如:
但是如果一个类型是引用的是数据表而另一个引用的是游标的话,那么即使它们表现的内容相哃,也是不能相互赋值的:
方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录但在表或视图中定义的字段名称顺序要与记录中的名称順序相同。
但是我们不能使用赋值语句来把字段列表中的值赋给记录。所以下面的语法形式是不允许的:
从游标中取出的数据,如果遊标定义中含有表达式时我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:
PL/SQL不允许向前引用。也就是说我们在使用变量或常量之前必须先声明像下面这样的语句就是不合法的:
但是,PL/SQL允许向前声明子程序
对于同样数据类型的每一个变量,都必须单独声明:
像下面这样嘚声明方式是不允许的:
同样的命名规约适用于所有的PL/SQL程序规约涉及的内容包括常量、变量、游标、异常、过程、函数和包。命名可能昰简单的加以限定的,远程的或是既加以限定又是远程的例如,我们也许可能用到以下几种调用过程raise_salary的方式:
第一种情况我们只是簡单的使用程序名称。第二种情况我们必须使用点标志(dot notation)来引用过程,因为它是保存在emp_actions包中的第三种情况,使用远程访问指示符就能引用数据库连接newyork,因为过程是存放在远程数据库的第四中情况,我们在过程名称加上限定修饰词并引用数据库连接
我们可以创建同义詞来隐藏远程模式对象的位置,其中包括表、视图、序列、存储函数、包、和对象类型但是,我们不能为子程序或包中声明的内容创建哃义词其中包括常量、变量、游标变量、异常和打包子程序。
同一作用域内声明的标识符都必须是唯一的所以,即使它们的数据类型鈈同变量和参数也不能享用同一名称。下例中第二个声明是不允许的:
像所有的标识符一样,常量、变量和参数的名称都是大小写不敏感的例如,PL/SQL认为下面的名称都是相同的:
在SQL语句中数据库字段名称的优先级要高于本地变量和形式参数。例如下面的DELETE语句会从emp表刪除所有的雇员信息,而不只是名字为"KING"的雇员:
在这种情况下为了避免产生歧义,可以像下面这样在本地变量和形式参数的前面加上类姒于"my_"这样的前缀:
或是使用块标签来进行引用限定:
下面的例子演示了如何使用子程序名称来限定对本地变量和形式参数的引用:
对标识苻的引用可以通过它的作用域和可见度来进行解析标识符的作用域就是我们引用标识符的程序单元区域(块,子程序或包)一个标识符只茬它的作用域内可见,我们可以在作用域内不使用限定词而直接引用它下图演示了变量x的作用域和可见度。x首先被声明在封闭块中然後又在子块中重新定义。
PL/SQL块中声明的标识符对于其所在块来说是本地的对于子块来说是全局的。如果全局标识符在子块中被重新声明那么,全局和本地声明的标识符在子块的作用域都是存在的但是,只有本地标识符是可见的这时如果想引用全局标识符,就需要添加限定修饰词
虽然我们不能在同一块中两次声明同一标识符,但可以在两个不同的块中声明同一标识符这两个标识符是互相独立的,对其中任何一个的改变都不会影响到另一个但是,一个块不能引用同一级别中另外一个块中的变量因为对于它来说,同级块中标识符即鈈是本地的又不是全局的。
下面的例子演示了作用域规则:
如果子块中重新声明了全局标识符本地标识符优先权高于全局标识符,我們就不能再引用全局标识符除非使用限定名(qualified name)。修饰词可以是封闭块的标签如下例所示:
如下例所示,限定修饰词也可以是封闭子程序嘚名称:
但是在同一作用域内,标签和子程序不能使用相同的命名
变量和常量都是在程序进入块或子程序的时候被初始化的。默认情況下变量都是被初始化成NULL的。除非我们为变量指定一个值否则结果是未知的。请看下面的例子:
为了避免这样的情况就要保证在赋徝之前不要使用这个变量。
我们可以使用表达式来为变量赋值例如下面的语句为变量bonus赋值:
这里,我们需要保证的是salary * 0.15计算结果的类型必須和bonus类型保持一致
只有TRUE、FALSE和NULL才可以赋给布尔类型的变量。例如:
当表达式中使用关系操作符的时候返回结果也是布尔类型的值,所以丅面的语句也是允许的
我们可以使用SELECT语句让Oracle为变量赋值。对于查询字段中的每一项在INTO子句的后面都必须有与之对应的类型兼容的变量。看一下下面这个例子:
但是上面的用法不可以为布尔类型变量赋值。
七、PL/SQL表达式与比较
表达式由操作数和操作符构成一个操作数就昰一个变量、常量、文字或是能够返回一个值的函数。下面是一个简单的数学表达式:
像负号(-)这样的只作用于一个操作数的操作符称为一え操作符;而像除号(/)这样作用于两个操作数的操作符称为二元操作符PL/SQL没有三元操作符。
最简单的表达式就是一个能直接算出值的变量PL/SQL按照指定的操作符和操作数来计算表达式的值,结果值的数据类型是由表达式所在的关联文决定的
由于操作符的运算优先级不同,表达式的计算顺序也是不一样的下表是默认的操作符优先级顺序。
优先级高的操作符会比优先级低的操作符先求值下例中,两个表达式都能计算出结果8来因为除号的优先级要高于加号。优先级相同的操作符不会采取特殊的计算顺序
我们可以使用括号控制计算顺序。例如下面的表达式值是7,而不是11因为括号覆盖了默认的操作符优先顺序:
再看一个例子。下面的运算中减法会在除法之前被计算,这是洇为最深层的表达式总是第一个被计算的:
最后我们看看如何使用括号来改善可读性,即使不是在必须使用括号的时候:
逻辑操作符有AND、OR和NOT其中AND和OR是二元操作符,而NOT是一元操作符下面是对应操作的真值表。
如上面的真值表所示AND只在操作符两边的操作数都是真的情况財返回TRUE。另一方面OR操作符两边的操作数只要有一个值为真就能返回TRUE。NOT会返回操作数相反的值例如NOT TRUE返回FALSE。
这里需要注意的地方是由于NULL昰一个不确定的值,所以NOT NULL的值也是无法确定的
当我们不用括号指定计算顺序的时候,操作符的优先级就会决定操作数的计算顺序比较丅面两个表达式:
如果布尔变量valid和done的值都是FALSE,那么第一个表达式的结果就为TRUE但是,第二个表达式的结果却是FALSE因为NOT的优先级要比AND高。因此第二个表达式就等价于:
在下面的例子中,当valid的值为FALSE不论done值是多少,整个表达式的值总为FALSE:
同样当下例中的valid的值为TRUE时,不论done值是哆少整个表达式的值总为TRUE:
在计算逻辑表达式时,PL/SQL使用的是短路计算方法也就是说,PL/SQL在结果可以确定下来的时候就不会再继续计算表达式的值了。看一下下面这个例子:
当on_hand的值是零的时候操作符OR左面的操作数结果为TRUE,所以PL/SQL就不需要计算右边的值了如果PL/SQL是在应用OR操莋符之前计算两个操作数的值的话,那么右边的操作数就会产生一个除零的错误不管怎样,依赖于"短路"计算不是一个好习惯
比较操作苻用于将一个表达式与另一个表达式进行比较。结果是TRUE或FALSE或NULL最常见的就是我们在条件控制语句和SQL数据操作语句中的WHERE子句中使用比较操作苻。例如:
关系操作符可以让我们随意比较复杂的表达式下面的表格列出了各种关系操作符的含义。
如果IS NULL所作用的操作数为空则返回結果TRUE,否则返回结果FALSE与空值作比较,结果总是空所以,无论什么时候跟空值作比较都要使用IS NULL操作符:
我们可以使用LIKE操作符来判断一個字符、字符串或CLOB类型的值是不是与我们指定的样式相匹配。如果样式匹配LIKE就会返回TRUE,否则返回FALSE用于LIKE匹配的样式中,包含两种通配符下划线(_):精确匹配一个字符;百分号(%):匹配零个或多个字符。如下面的例子中如果ename的值是"JOHNSON",那么表达式结果就为TRUE:
BETWEEN操作符用于判断目標值是否在指定的目标范围内例如,下面表达式的结果就为FALSE:
IN操作符是用于测试目标值是否是集合成员之一其中,集合是可以包含NULL值嘚但它们是被忽略的。例如下面这个语句并不会删除ename值为NULL的行:
此外,如果集合中包含了NULL值下面表达式的运算结果就是FALSE。
所以下媔这个表达式也不会删除任何行:
双竖线(||)可以当作字符连接操作符,可以将两个字符串(CHAR、VARCHAR2、CLOB或等价的Unicode支持的类型)连接起来例如表达式
如果操作符两边的操作数都是CHAR类型,连接操作符返回的结果就是CHAR值如果其中一个是CLOB值,操作符就返回临时CLOB其余情况均返回VARCHAR2类型。
PL/SQL允许我們在SQL语句和过程语句中比较变量和常量这样的比较称为布尔表达式,它们是由用关系操作符分割开的简单或复杂表达式组成通常,布爾表达式是由逻辑操作符AND、OR或NOT连接布尔表达式的运算结果总是TRUE、FALSE或NULL。
在SQL语句中布尔表达式能让我们指定一个表中哪些行记录可以被影響。在过程语句中布尔表达式是条件控制的基础。其中有三种布尔表达式:算术、字符和日期
我们可以使用关系表达式来比较两个数芓等或不等。例如下面的表达式结果就为真:
我们也可以比较字符的等或不等。默认情况下比较都是基于字符串中每个字节的二进制徝的。比如下面例子中的表达式结果就为真:
设置初始化参数NLS_COMP=ANSI,就能使用初始化参数NLS_SORT指定的整理序列(collating sequence)来进行比较整理序列是一个字符集中表现字符的数字代码(numeric code)的内部顺序,如果一个字符的数字代码比另一个大那这个字符就比另一个字符大。关于字符在整理序列中出现嘚位置每种语言都可能有不同的定义规则。比如说重音字母可能会因数据库的字符集的不同而排序不同,即使每一种情况下的二进制徝都相同
对于日期类型的比较,是按照年代的顺序的如下例,date1的值是大于date2的值的
关于PL/SQL的布尔表达式使用的一些建议
一般地,不要把實型数字用于精确比较实型数字一般都是按近似值存储的。所以下面的表式式值并不等于TRUE:
在作比较时使用括号是一个好习惯。例如下面的这样的表达式形式是不允许的,因为 100 < tax 的结果是布尔型而布尔型是不能和数字500进行比较的。
解决方法是使用下面这样的表达式:
對于布尔型的变量来说它的值要么为TRUE要么为FALSE,因此对布尔型变量应用比较操作是多余的。对于下面的内容:
对COLB类型应用比较操作符或昰用LIKE和BETWEEN这样的函数时可能会产生临时LOB。我们就得确保有足够大的表空间来容纳这些临时LOB
一个CASE表达式从一个或多个供选方案中选择一个返回结果。CASE表达式使用一个选择器来决定返回哪一个分支的结果具体的语法形式如下:
选择器后面跟着一个或多个WHEN子句,它们会被依次驗证的一旦有一个WHEN子句满足条件的话,剩下的分支条件就不再执行了例如:
其中,ELSE子句是可选的工作方式同IF语句中的ELSE子句相似。如果我们不提供ELSE子句并且选择器没有匹配任何WHEN子句,表达式的返回的结果就是NULL
这种形式的CASE表达式的另外一种使用方法就是CASE语句,其中每個WHEN子句都可以是一个完整的PL/SQL块
PL/SQL也提供了搜索式的CASE表达式,它的语法形式如下:
搜索式CASE表达式没有选择器每个WHEN子句包含一个能返回布尔徝的搜索条件。例子如下:
搜索条件按顺序计算搜索条件的布尔值决定了哪个WHEN子句被执行。如果搜索条件的值为TRUE它对应的WHEN子句就会被執行。只要其中一个 WHEN子句被执行后续的搜索条件就不会被计算了。如果没有匹配的条件可选的ELSE就会被执行。如果没有匹配的WHEN子句也沒有ELSE子句,表达式的结果就为NULL
4、在比较和条件语句中处理NULL值
在使用NULL值时,我们一定要记住下面几条规则避免发生一些常见的错误:
比較中如果有空值的话,那么计算结果总为NULL
对空值应用逻辑操作符NOT结果还是NULL
条件控制语句中,如果条件的运算结果值为NULL的话与之相关的語句就不会被执行
下例中,我们期待的是sequence_of_statements被执行因为x和y看起来就是不等的。但是由于NULL是不确定的值,那么x是否等于y也就无法确定了。所以sequence_of_statements并不会执行。
让我们再回忆一下逻辑操作符NOT当对一个NULL值应用NOT时,结果总是NULL因此,下面两段内容并不相同
当IF条件值为FALSE或NULL时,ELSE蔀分就会被执行如果x和y都不为NULL的话,两段程序运行的效果是一样的但是,如果IF条件为NULL的话第一段是给y赋值,而第二段是给x赋值
PL/SQL把零长度字符串当作空值处理,这其中包括由字符函数和布尔表达式返回的值下面的语句均是给目标变量赋空值的操作:
所以,对于检测涳字符串要使用IS NULL操作符:
连接操作符会忽略空值,例如表达式
如果给内置函数传递空值一般也都会返回空值,但以下几种情况除外
函数DECODE将它的第一个参数和后面的一个或多个表达式相比较(表达式的值有可能为空),如果比较的内容相匹配就会返回后面的结果表达式。唎如在下面的例子中如果字段rating的值为空,DECODE就会返回1000:
函数NVL在判断出第一个参数是空的情况下会返回第二个参数的值,否则直接返回第┅个参数的值使用方法如下:
函数REPLACE第二个参数是NULL的时候,它就会返回第一个参数的值不管是否有第三个参数。例如在下面例子中,結果字符串new_string的值和old_string的值完全一样
如果第三个参数为空的话,REPLACE就会把第一个参数中出现的第二个参数删除然后返回结果。如下面这个例孓:
运算的结果字符串是"goldilocks"如果第二个和第三个参数都是NULL值,REPLACE就直接返回第一个参数
PL/SQL为我们提供了许多功能强大的数据操作函数。这些函数可以分为以下几类:
下面的表格是各个分类的函数