Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

7.1 程序数据的命名

PL/SQL要求在给数据结构命名的时候应该遵守下面的规则

  • 名字的长度最长可以30个字符
  • 名字必须以字母开始。
  • 在第一个字母之后,可以使用字符包括,字母,数字,$,#,_
  • 所有的名字是不区分大小写的(除非名字被放在双引号里)。
  • 这些命名规则也有一些例外。如果在声明时把名字放在双引号中,你实际上可以跳过了除了最30字符限制之外的所有规则。

7.2 PL/SQL数据类型概述

所有这些预先定义好的数据类型都是在PL/SQL的STANDARD包中定义的。

7.2.2 数字

Oracle数据库10g之前,NUMBER是唯一一个能够和数据库的数据类型直接对应的PL/SQL的数值型数据类型。

Oracle数据库10g引入了两种二进制浮点类型:BINARYFLOAT和BINARYDOUBLE。都可以同时在数据库和PL/SQL中使用。不同的是它们有二进制的精度,因此会有四舍五入。这两种类型支持NaN和正无穷和负无穷,只要底层平台允许,这些二进制类型的自述完全可以通过硬件完成,因此应用程序的性能也会得到极大的提升。

Oracle11g又增加了两种浮点数变体,SIMPLEFLOAT和SIMPLEDOUBLE,不过它们不允许NULL值,而且发生溢出时也不会抛出异常。

7.2.3 日期,时间戳和时间间隔

  • 9i以前,只有DATA这一种数据类型,精确到秒。
  • 9i之后,引入了两种新的数据类型,INTERVAL和TIMESTAMP。

7.2.4 布尔类型

取值范围:TRUE,FALSE和NULL

7.2.5 二进制数据类型

  • BILE数据类型代表着保存在数据库之外的操作系统文件中的非结构化二进制数据。
  • RAW像VARCHAR2字符类型一样,是一个变长的数据类型。只是Oracle工具在处理RAW数据时不会做字符集转换操作。
  • LONG RAW最好移植到BLOB,因为LONG RAW列可以存2G数据,但PL/SQL只能处理前32760个字节。

7.2.6 ROWIDs

  • ROWID代表了表中一行记录的唯一物理地址
  • UROWID代表了一个索引组织表中一条记录的逻辑地址。

7.2.7 REF CURSORs

  • 强REF CURSOR游标变量和一个特定的记录结构(使用%ROWTYPE)关联在一起。
  • 弱REF CURSOR游标变量没有关联到任何特殊结构。

7.2.8 Internet数据类型

7.2.9 "Any"数据类型

7.3 程序数据的声明

7.3.1 声明一个变量

语法

name datatype [NOT NULL][:=| DEFAULT default_assignment];

变量声明中可以包含一个NOT NULL子句,有了这个子句后,如果没有为变量赋值,数据库就会抛出一个异常。

7.3.2 声明一个常量

声明一个变量和声明一个常量仅有两个区别:对于常量而言,你需要加上CONSTANT关键字。常量的值是在声明时设置的,并且一直不会改变。

name CONSTANT datatype [NOT NULL]:=| DEFAULT default_assignment;

7.3.4 锚定声明

所谓一个“锚定”的数据类型,就是告诉PL/SQL按照已经定义好的数据结构来设置变量的数据类型。

  • 标量锚定:这种方法利用的是%TYPE属性,用这种方法定义的变量可以根据某个表中的一列或者其他的PL/SQL标量变量来定义变量类型。(一个)
  • 记录锚定:这种方法利用的是%ROWTYPE属性,用这种个表的结构或者某个预定义的显示PL/SQL游标结构对变量的记录结构进行定义。(一组,有点像结构体的感觉)

    variable name type attribute%TYPE [optional default value assignment]; variable name tablename | cursorname%ROWTYPE [optional default value assignment];

注意:对于错的引用的解释是在代码编译时刻进行的;锚本身不会有运行时刻的额外开销。

7.3.6 使用锚定声明的好处

  • 和数据库列的同步
  • 局部变量的标准化

7.3.7 NOT NULL数据类型的锚

当你声明变量时,你可以要求这个变量是NOT NULL的。如果其他变量是用这个变量的%TYPE属性声明的,那这个约束也会传递给这个新的变量。不过,如果%TYPE引用的源是一个NOT NULL的数据库列,情况就不是这样了。一个数据库表的NOT NULL约束不会自动地传递给变量。

7.4 程序员定义的子类型

  • 有约束的子类型:这种子类型对原数据类型的取值做了限制或者约束。
  • 没有约束的子类型:这种子类型并没有限制原始数据类型的取值范围。

要想使用一个子类型变量,你首先必须在匿名PL/SQL块,过程,函数或者包的声明单元声音这个子类型。

SUBTYPE subtype_name IS base_type;

7.5 数据类型的转换

  • 隐式类型转换
  • 显式类型转换

7.5.2 显式类型转换

  • CHARTOROWID函数:把一个CHAR或者VARCHAR2类型的字符串转换成一个ROWID类型的值。
  • CAST函数:它把一个内置的数据类型或者集合类型的数据转换成另外一个内置数据类型或者集合类型数据。
  • CONVERT函数:把字符串从一个字符集转换成另一个字符集。

转载于:https://www.cnblogs.com/tjpanda88/archive/2011/11/16/2250502.html

Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据相关推荐

  1. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

    Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 ACID原则:即一个事务具有原子性.一致性. ...

  2. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  3. 《Oracle PL/SQL程序设计(第5版)》一一2.5 编辑PL/SQL的环境

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.5节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  4. 《Oracle PL/SQL程序设计(第5版)》一一2.4 执行必要的PL/SQL任务

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.4节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  5. 《Oracle PL/SQL程序设计(第5版)》一一1.6 一些建议

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第1章,第1.6节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  6. ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

    通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是p ...

  7. Oracle PL/SQL编程学习笔记:Merge方法的使用

    Oracle11g的Merge很强大! 1 create or replace procedure BRANCE_REPORT_MERGE is 2 3 begin 4 Merge into BRAN ...

  8. Oracle PL/SQL编程学习笔记:游标

    游标参考:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 1 create or replace procedure REGI ...

  9. JavaScript高级程序设计读书笔记(第5章引用类型之Array类型)

    为什么80%的码农都做不了架构师?>>> 1.数组长度 //lenth会自动更新 var arr=["black","red","g ...

最新文章

  1. 使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!
  2. 美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?
  3. python特征选择relieff图像特征优选_ReliefF与QPSO结合的故障特征选择算法
  4. C++虚继承和虚基类详解(二)
  5. 三十、Java 多线程编程(上篇)
  6. Scrapy框架的学习(4.scrapy中的logging模块记录日志文件以及普通的项目中使用)
  7. Codeforces 1138B Circus (构造方程+暴力)
  8. 使用JNDI操作LDAP(4)(转载)
  9. c# 判断点是否在区域内 点在区域内 在多边形内 判断
  10. Java集合系列---TreeMap源码解析(巨好懂!!!)
  11. 初学python之路-day15
  12. Spring如何加载xml文件
  13. mysql 数据库数据恢复 库被删了怎么恢复数据库
  14. 编写C语言程序的7个步骤和编程机制
  15. “女主播翻车”骂声不断,店湾妹感慨:主播界怎么了?三观已毁!
  16. 计算机网络:循环冗余码CRC
  17. 第二章 SQL命令 ALTER TABLE(二)
  18. 香橙派 One Plus 像单片机一样硬件寄存器 控制GPIO 点灯
  19. socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应
  20. vulnhub靶机-DC2-Writeup

热门文章

  1. Python将DataFrame的某一列作为index
  2. 微信和支付宝中的一些常用方法封装
  3. 使用ffmpeg裁剪和合并视频
  4. idea在Terminal中使用maven指令
  5. BZOJ.2521.[SHOI2010]最小生成树(最小割ISAP/Dinic)
  6. Oauth2.0协议 http://www.php20.com/forum.php?mod=viewthreadtid=28 (出处: 码农之家)
  7. JavaScript初学笔记
  8. UA OPTI570 量子力学3 单个自由粒子的薛定谔方程
  9. UA STAT675 统计计算I 随机数生成2 线性递归模m与Multiple Recursive Generator (MRG)
  10. [概统]本科二年级 概率论与数理统计 第八讲 大数定律与中心极限定理