热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

《oraclepl/sql程序设计》学习笔记

《oraclepl/sql程序设计》学习笔记本篇主要是记录一些容易混淆或者以前理解不够清楚的知识点,只选择常用知识点。一、case语句和case表达式1、case语句和case表达式都有两种模式:简单型和搜索型。简单型:...SyntaxHighlighter.all();

《oracle pl/sql程序设计》学习笔记
 
本篇主要是记录一些容易混淆或者以前理解不够清楚的知识点,只选择常用知识点。
 
一、case语句和case表达式
1、case语句和case表达式都有两种模式:简单型和搜索型。
    简单型:case exp when res1 then ... res2 then ... [else ...]  (end case |end);
    搜索型 :case when exp1 then ... exp2 then ... [else ...]  (end case |end).
2、区别
    case语句没有匹配项会报错;case表达式不会,返回null。
    case语句以end case结尾;case表达式以end结尾。
 
二、for循环只有数值型下标和游标两种方式循环,数值型的上下标只在第一次循环前求值(包括表达式计算和四舍五入)。
 
三、11g以后新增了continue [label1] [when exp1]语句,用于执行下一个循环。
  www.2cto.com  
四、异常处理
1、sqlcode
    获取当前异常号,正常为0.
2、sqlerrm
    最原始的异常信息获取方式,最大512字节。不带参数时返回当前sqlcode对应的信息。带参数时返回指定sqlcode的信息。
3、dbms_utility.format_error_stack
    比sqlerrm可容纳字节多,达1899字节,只能返回当前sqlcode对应的信息。
4、dbms_utility.format_error_backtrace
    10G以后新增,返回当前异常栈,从最开始异常的过程名和代码行号,一直回溯到当前调用块。可以快速定位异常位置。
 
为了获取最全的异常信息,建议使用

dbms_utility.format_error_stack||dbms_utility.format_error_backtrace的方式输出,如果是调用的过程中有异常处理,那么应该把需要继续抛出的异常以下列两种方式抛出:
raise_application_error(-20008,dbms_utility.format_error_stack||dbms_utility.format_error_backtrace);--重建异常栈
raise_application_error(-20008,'当前添加的信息',true) ;--只是添加到当前异常栈,不会重建。
其他的方式都会使异常栈重建,而丢失之前的异常信息,所以不要用raise [...]抛出异常,除非你已经处理了之前的异常。
  www.2cto.com  
 
五、字符型
1、varchar2,推荐所有的字符型都使用此类型,pl/sql中最长32767字节,db中8i以后4000字节。
2、nvarchar2,和varchar2类似,只是使用国家字符集,且定义长度时默认以字符为单位,pl/sql中最长32767字节,db中8i以后4000字节。
3、char,不推荐使用,因为填充空格会带来很多意想不到的问题,且浪费空间,pl/sql中最长32767字节,db中8i以后2000字节。
4、nchar,和char类似,只是使用国家字符集,且定义长度时默认以字符为单位,pl/sql中最长32767字节,db中8i以后2000字节。
5、其他的字符类型都是为了兼容ansi sql定义的子类型。
6、char类型和“非varchar2类型”(如字面值、char)比较,先用空格填充到一样的长度再比较,如果和varchar2类型比较,不填充直接比较。
 
六、数值型
1、number,最基础的类型,金融类精确数据必须选择,number(p,s),p (1~38), s (-84~127).
2、pls_integer,binary_integer,simple_integer。pl/sql专用,二进制计算模式,10g以后不推荐使用binary_integer,用pls_integer代替,simple_integer是11g新增类型,简化pls_integer,不能为null,不检查溢出,不支持特殊谓词,速度非常快。因为pl/sql中基本不需要上述支持。
3、binary_float,binary_double。二进制计算模式,单精度浮点数和双精度浮点数,字面值后面加f或d。
4、simple_float,simple_double。pl/sql专用,二进制计算模式,11g以后新增类型,也是简化binary系列类型,高效率。
  www.2cto.com  
 
七、日期类型
1、date,精确到秒
2、timestamp,精确到9位小数秒,默认为6位小数秒。
3、timestamp with time zone,固定时区的timestamp
4、timestamp with local time zone,在客户端和服务器之间转换时区的timestamp.
5、interval year[0~4] to month,默认year是2
6、interval day[0~9] to second[0~9],默认day是2,second是6
7、yminterval_unconstrained,dsinterval_unconstrained使用在过程的参数和返回值中,不再使用默认精度,不损失精度。
 
八、其他类型
1、raw,不做字符集转换,pl/sql最大32767,db最大2000字节。
2、long ,long raw,不推荐使用,以大对象代替。
3、urowid,rowid,使用urowid代替rowid,用来储存数据库的各种rowid。
4、记录类型,基于游标、表类型或者自定义的记录类型,type ... is record (...,...,).
5、关联数组,type .. is table of ... index by pls_integer / varchar2(..).类似java中的map
6、嵌套表,type ... is table of ...  ,可以作为db的列。列在表外。类似数据库表,索引值类似rowid
7、varray , type ... is varray of ... ,可以作为db的列。列在表内。类似java中的数组,保留顺序,固定长度。  www.2cto.com  
 
8、bfile,blob,clob,nclob,大对象,bfile只读,文件在数据库外,lob可读写,文件在数据库内,数据库列中只存定位器。
 
九、子类型定义
子类型定义可以直接在基础类型上做特殊限制,也可以锚定类型。
锚定的子类型不会继承父类型的not null和缺省值。
锚定的类型也不会继承被锚定的数据库列上的not null和缺省值。
 
 
作者 hulubo

推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 梦幻西游挖图奇遇:70级项链意外触发晶清诀,3000W轻松到手
    在梦幻西游中,挖图是一项备受欢迎的活动,无论是小宝图还是高级藏宝图,都吸引了大量玩家参与。通常情况下,小宝图的数量保证了稳定的收益,但特技装备的出现往往能带来意想不到的惊喜。本文讲述了一位玩家通过挖图获得70级晶清项链的故事,最终实现了3000W的游戏币逆袭。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口***测试邮件发送附件*@parammultipartFile*@return*@RequestMappi ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
author-avatar
拍友2602923913
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有