`
just4you
  • 浏览: 65665 次
社区版块
存档分类
最新评论

PL/SQL笔记(二)

阅读更多

数据类型

  1. 标量类型
  2. 复合类型
  3. 引用类型
  4. LOB类型

标量类型

 

	1.numeric:存放整数,实数,浮点数
		包括:
			1.binary_integer 存储带符号整数,pls_integer和binary_interger值比nuber值占用较少存储空间,但binary_integer操作比pls_integer慢。
				子类:
					1.natural:存储非负整数
					2.naturaln:存储非负整数,不能为空
					3.positive:存储正整数
					4.positive:存储正整数,不能为空
					5.signtype:存储-1,0,1
			2.number存储定点数,浮点数
				1.定点数:nubmer(precision,scale)
				2.整型数:number(precision)
				3.浮点数:number 数度为38为的十进制浮点数
			3.pls_integer 存储带符号整数,范围同binary_integer,两者不完全兼容。比nubmer和binary_integer类型快。
	2.character:存放字符串
		包括:
			1.char 存放固定长度字符数据。
				char[(max_length)]
				最大长度(字节单位),缺省为1,最大32767。
				如果char(n)类型的变量用于存储多字节字符,则最大长度小于n个字符,如果不满n个字符,则末尾用空格填充。数据库char类型列的最大长度为2000字符,所以不能把长度大于2000的char类型值插入到数据库中,但可插入到类型为varchar2或long的表列中。
			2.varchar2 变长字符类型,数据内部表示取决于当前数据库的字符集
				varchar2(max_length)
				1<=max_length=<32767
				如存储多字节字符,则最大长度小于n个字符。varchar2类型列的最大长度为4000字符,所以 不能把长度大于 4000的varchar类型值插入到数据库中,可插入到long的表列中。
			3.long 存储变长字符数据。最大长度2G
			4.nchar 存储固定长度的nls字符数据
				nchar(max_length)
				1<=max_length<=32767
			5.nvarchar2 存储可变长度的nls字符数据。
				nvarchar2(max_length)
				1<=max_length<32767
	3.raw类
		包括:
			1.raw 存放固定长度的二进制数据
				raw(max_length)
				1<=max_length<32767
			2.long raw
	4.rowid类
		rowid伪列,用于存储行标识符(rowid),行标识符是固定长度的16进制字符串,用来表示 一条记录的存储地址。行标识符不能由PLSQL生成,可以从一个表的rowid伪列中得到 。
	5.date类
		日期缺省值为当月的第一天,时间的缺省值为午夜12:00。
		PLSQL中的date变量与数据库中的date类型列相同。包括世纪、年、月、日、小时、分钟、秒。一个date变量占七个字节,分别表示世纪、年、月、日、小时、分钟、秒。
		缺省的日期格式由oracle初始化参数NLS_DATA_FOMRAT决定。使用to_date内嵌函数可以将characte类型的值转换成date类型。使用to_char将date转换成character。
	6.boolean类
		用于存储逻辑值。true,false,null
		null用来表示一个错误的,不合适 的或不确定的值。
		boolean类型的变量只能用在逻辑操作中,且只能将true,false,null赋给该类型的变量。不能将boolean类型的值插入到数据库中,也不能将数据库中的数据赋给boolean类型的变量。
	7.trusted类
		mlslabel类型的变量被用来在trusted oracle中存储变长 的二进制标签。

 数据类型之间的转换

	1.强制类型转换
		通过使用函数来完成不同类型之间的转换。这些函数也可以是标准SQL中的数据类型转换函数
		to_char:numeric|date ->varchar2
		to_date:character -> date
		to_number: character -> number
		rawtohex: raw  ->16进制
		hextoraw: 将用character类型描述的16进制转换成二进制数
		chartorowid:用character类型描述的rowid转换成二进制数
		rowidtochar:将二进制形式的rowid转换成18个字符的行标识符
		如:
		declare
			v_birthdate date;
			v_show varchar2(20);
		begin
			select birthdate
			into v_birthdate
			form auths
			where name='王达琳';
			v_show := to_char(v_birthdate);
			DBMS_OUTPUT.PUT_LINE('王达琳的出生日期为'||v_show);
		end;
	2.自动类型转换
		declare
			v_salary varchar2(15);
		begin
			select salary
			 into v_salary
			 from auths
			 where author_code='A00003';
		end;
		数据库中salary列为number(8,2),但是v_salary类型为varchar2(15)。PLSQL能将numeric类数据自动转换成字符串并赋给character类的变量。

复合类型
具有内部成员的类型。该成员可以被单独操作。通常该类型的变量由一个或多个标量类型组成

1.记录:与预定义的标量类型不同,在使用复合类型之前用户 必须先定义该复合类型。

type record_type is record(
			field1 type1 [not null] [:=expr1],
			field2 type2 [not null] [:=expr2],
			...
			fieldn typen [not null] [:=exprn]
		);
		record_type表示记录类型的名字。
		field表示记录里域的名字。
			域的声明与记录外的变量声明类似,可以有not null约束和初始值。如果没有被赋值,则系统自动赋值为null。在赋初值时":="可以用DEFAULT代替。
		type表示记录里域的类型。
		expr表示为域赋的初始值。

 

例如:

type record_type is record(
			field1 type1 [not null] [:=expr1],
			field2 type2 [not null] [:=expr2],
			...
			fieldn typen [not null] [:=exprn]
		);
		record_type表示记录类型的名字。
		field表示记录里域的名字。
			域的声明与记录外的变量声明类似,可以有not null约束和初始值。如果没有被赋值,则系统自动赋值为null。在赋初值时":="可以用DEFAULT代替。
		type表示记录里域的类型。
		expr表示为域赋的初始值。

 

也可以用select语句来为记录赋值,记录中域的类型一定要和select列表中域的类型一致。

declare
			--定义一个记录,他的域和auths表中的一些域类型相同。
			type t_AuthRec is record(
				AuthorCode auths.author_code%type,
				Name auths.name%type,
				Birthdate auths.birthdate%type,
				EntryDateTime auths.entry_date_time%type
			);
			--声明一个记录类型来接收数据
			v_Author t_AuthRec;
		begin
			select author_code,name,birthdate,entry_date_time
			into v_Author
			from auths
			where author_code='A00009';
		end;

 

在PLSQL中声明一个与数据库表中各列类型相同的记录,可以用%rowtype操作符。类似于%type,%rowtype返回一个记录类型。

declare
			v_Article article%rowtype;

 

使用%rowtype声明的记录不包括数据库表中的not null约束,但包括varchar2列和char列的长度,number列的精度和标度。当表定义 发生改变时,由%rowtype声明 的记录也发生相应的改变。

2.表

定义表:

Type tabletype_name is table of type index by binary_integer
		Tabletype_name:表类型名
		type:预定义的标量类型或通过%type引用的标量类型。表的索引是binary_integer类型。当定义了表类型后,就可以声明该类型的变量

 例如:

declare
			--定义表类型t_NameTable,其元素类型是auths数据库表中的name列的类型。
			type t_NameTalbe is talbe of auths.name%type index by binary_integer;
			--定义表类型t_address,其元素类型是auths表中的address列的类型。
			type t_AddressTable is talbe of auths.address%type index by binary_integer;
			--声明两个表类型变量
			v_name t_NameTable;
			v_Address t_AddressTable;
		begin
			--引用PLSQL表中的元素
			--tablename(index)
			--index是表的索引,用binary_integer类型的变量或是能转换成binary_integer类型的表达式表示。
			v_Name(2) := 'Wang';
			v_Address(-3) :='street 1';
		end;

 

例如:

declare
			type t_AuthorRecord is table of auths%rowtype index by binary_integer;
			--每一个元素 都是一条记录
			v_auths t_authorRecord;
		begin
			--检索作家代码是A00009的作家,并存放到v_Auths(00009)中。
			select *
			into v_auths(00009)
			from auths
			where authors_code='A00009';
			--v_Auths表中的每个元素都是记录,可以通过如下语法引用记录
			--table(index).field
			v_Auths(00009).name := 'Join';
			DBMS_OUTPUT.PUT_LINE(v_Auths(00009).name);
		end;

 

PLSQL表中元素无特定顺序,因为表中元素 不像数组一样被连续地存储在一个空间内。

PLSQL表中的KEY不必是连续的,任意binary_integer类型的值或是表达式都可用作表的索引(KEY列)。
当向一个PLSQL表中插入一个元素时,就为该表分配 了用以存放该元素存储空间,PLSQL表的大小是没有限制的。

 

分享到:
评论
1 楼 bluedot 2008-09-02  
说的挺明白,试一下!

相关推荐

    pl/sql学习笔记

    以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...

    PL/SQL笔记pl/sql笔记

    本篇笔记主要涵盖了PL/SQL的基础语法和常用操作,包括检索数据、操纵数据以及SQL游标的应用。 在PL/SQL块中,可以直接嵌入的数据操作语句包括SELECT、DML(INSERT、UPDATE、DELETE)以及事务控制语句(COMMIT、...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...

    pl/sql个人笔记.

    ### PL/SQL 个人笔记详解 #### 一、PL/SQL 块中可嵌入的 SQL 语句类型 PL/SQL(程序化SQL)是Oracle数据库的标准编程语言,它扩展了SQL的功能,允许在数据库环境中编写过程化的业务逻辑。在PL/SQL中,可以嵌入多种...

    pl/sql笔记

    #### 二、PL/SQL的特点与优势 PL/SQL自Oracle 6版本引入以来,受到了广泛欢迎,其主要特点包括: 1. **丰富的数据类型**:支持从基本的数值和字符串到复杂记录和表等多种数据类型,包括集合类型。 2. **清晰的结构...

    pl/sql 笔记整理 +案例

    oracel pl/sql 编程 用户管理

    pl/sql数据库学习笔记

    PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...

    PL/SQL学习教程,附笔记

    PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...

    PL/SQl超级笔记

    **PL/SQL超级笔记概述** PL/SQL是Oracle数据库中的一个关键组件,它结合了SQL(结构化查询语言)的查询能力与过程性编程语言的功能,使得开发者能够编写复杂的数据库应用程序。这本“PL/SQL超级笔记”显然是针对...

    pl/sql笔记/sql笔记(游标创建存储过程)

    Pl/SQL简介 控制结构 复合数据类型 游标 异常 创建存储过程 函数的概念 包的概念 触发器概念

    pl/sql培训笔记

    ### PL/SQL培训笔记知识点概览 #### 一、PL/SQL简介与结构 PL/SQL,即Procedural Language for SQL,是Oracle数据库的一种内嵌式编程语言,结合了SQL的数据操作能力和过程化编程语言的控制结构。它提供了一种高效、...

    PL/SQL学习笔记4

    ### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...

    PL/SQL听课笔记

    ### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...

    我的PL/SQL学习笔记(一)

    在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...

    oracle/SQL和PL/SQL课堂笔记

    这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于指定需要选取的列,如`SELECT ename, sal, job FROM emp;`。字段顺序可以自由调整,例如`...

Global site tag (gtag.js) - Google Analytics