ORACLE学习笔记整理Word格式文档下载.docx

上传人:b****7 文档编号:21920220 上传时间:2023-02-01 格式:DOCX 页数:21 大小:144.93KB
下载 相关 举报
ORACLE学习笔记整理Word格式文档下载.docx_第1页
第1页 / 共21页
ORACLE学习笔记整理Word格式文档下载.docx_第2页
第2页 / 共21页
ORACLE学习笔记整理Word格式文档下载.docx_第3页
第3页 / 共21页
ORACLE学习笔记整理Word格式文档下载.docx_第4页
第4页 / 共21页
ORACLE学习笔记整理Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

ORACLE学习笔记整理Word格式文档下载.docx

《ORACLE学习笔记整理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ORACLE学习笔记整理Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

ORACLE学习笔记整理Word格式文档下载.docx

也可以看出ORACLE中的字符串连接运行符非常得单“||”。

2.语言基础

2.1PL/SQL数据类型

在PL/SQL程序中定义变量、常量和参数时,必须要为它们指定数据类型,在编写PL/SQL时,可以使用标量类型、复合类型、参照类型和LOB(LargeObject大对象类型)类型等。

如下表所示:

2.1.1标量(SCALAR)

合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。

它又分为七个组:

数字、字符、行、日期、行标识、布尔和可信。

1.数字

它有三种基本类型--NUMBER、PLS_INTEGER和BINARY_INTENER。

NUMBER可以描述整数或实数,而PLS_INTEGER和BINARY_INTENER只能描述整数。

(1)NUMBER,是以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它转换成为二进制进行运算的。

它的定义方式是NUMBER(P,S),P是精度,最大38位,S是刻度范围,可在-84127间取值。

例如:

NUMBER(5,2)可以用来存储表示-999.99999.99间的数值。

P、S可以在定义是省略,例如:

NUMBER(5)、NUMBER等;

(2)BINARY_INTENER用来描述不存储在数据库中,但是需要用来计算的带符号的整数值。

它以2的补码二进制形式表述。

循环计数器经常使用这种类型。

(3)PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。

(4)Number补充

在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范围在1.0*10-130——9.99*10125的数字,当Oracle中的数学表达式的值超过这个范围时,Oracle就会报错。

Number的数据声明如下:

1)Number(p,s)声明一个定点数p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127

2)Number(p)声明一个整数相当于Number(p,0)

3)Number声明一个浮点数其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。

定点数的精度(p)和刻度(s)遵循以下规则:

当s>

0时(s表示小数点右边的数字的个数):

当一个数的整数部分的长度>

p-s时,Oracle就会报错

当一个数的小数部分的长度>

s时,Oracle就会舍入。

当s<

0时(s表示小数点左边的数字的个数):

Oracle就对小数点左边的s个数字进行舍入。

当s>

p时,p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入例如:

Value

Datatype

StoredValue

123.2564

NUMBER

123.2564(不限制)

1234.9876

NUMBER(6,2)

1234.99(精确到小数点后两位)

12345.12345

Error(小数点左边的有效数字长度5小数点右边的有效数字长度2>

规定精度6)

NUMBER(6)

1235(等价于NUMBER(6,0))

12345.345

NUMBER(5,-2)

12300(小数点左边两位做四舍五入)

12345678

Error(8-2>

5)

123456789

NUMBER(5,-4)

123460000

1234567890

Error

12345.58

NUMBER(*,1)

12345.6

0.1

NUMBER(4,5)

0.01234567

0.01235

0.09999

0.09999

0.099996

2.字符

包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2几种类型。

(1)CHAR,描述定长的字符串,如果实际值不够定义的长度,系统将以空格填充。

它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储在ORACLE8中最大为2000。

(2)VARCHAR2(VARCHAR),描述变长字符串。

它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储在ORACLE8中最大为4000。

在多字节语言环境中,实际存储的字符个数可能小于L值,例如:

当语言环境为中文(SIMPLIFIEDCHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符。

(3)LONG,在数据库存储中可以用来保存高达2G的数据,作为变量,可以表示一个最大长度为32760字节的可变字符串。

(4)NCHAR、NVARCHAR2,国家字符集,与环境变量NLS指定的语言集密切相关,使用方法和CHAR、VARCHAR2相同。

(varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar。

因为varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变,推荐用varchar2。

(CHAR如果存放字母数字占1个字节,存放GBK编码的汉字存放2个字节,存放UTF-8编码的汉字占用3个字节;

NCHAR根据所选字符集来定义存放字符的占用字节数,一般都为2个字节存放一个字符(不管字符或者汉字)。

同理VARCHAR2与NVARCHAR2的区别。

3.行

包括RAW和LONGRAW两种类型。

用来存储二进制数据,不会在字符集间转换。

(1)RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

(2)LONGRAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。

(raw这种格式可以用来保存较小的图形文件或带格式的文本文件,如MiceosoftWord文档。

raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

longraw无可变长二进制数据,最大长度是2GB。

Oracle用这种格式来保存较大的图形文件或带格式的文本文件,如MiceosoftWord文档,以及音频、视频等非文本文件。

在同一张表中不能同时有long类型和longraw类型,longraw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代)

4.其他

(1)日期,只有一种类型--DATE,用来存储时间信息,站用7个字节(从世纪到秒),绝对没有“千年虫”问题。

(2)行标识,只有一种类型--ROWID,用来存储“行标识符”,可以利用ROWIDTOCHAR函数来将行标识转换成为字符。

(3)布尔,只有一种类型--BOOLEAN,仅仅可以表示TRUE、FALSE或者NULL。

(4)可信,只有一种类型--MLSLABEL,可以在TRUSTEDORACLE中用来保存可变长度的二进制标签。

在标准ORACLE中,只能存储NULL值。

5.复合(COMPOSITE)与引用(REFERENCE)

后面专门介绍。

6.LOB

LOB变量主要是用来存储大量数据的数据库字段,最大可以存储4G字节的内容。

主要有:

(1)CLOB:

和LONG类型相似,存储单字节字符数据。

(别用来存中文)

(2)NCLOB:

用来存储定宽多字节字符数据。

(3)BLOB:

和LONGRAW相似,用来存储无结构的二进制数据。

(4)BFILE:

它用来允许ORACLE对数据库外存储的大型二进制文本进行只读形式的访问。

2.1.2复合类型

复合变量是指用来存放多个值的变量,当定义复合变量时,必须要使用PL/SQL的复合数据类型,复合数据类型包括PL/SQL记录、PL/SQL表、嵌套表以及变长数组。

(1)PL/SQL记录

PL/SQL记录是由一组相关的记录成员组成的,类似于C语言中的结构体。

语法格式有为:

Type记录类型名isrecord(

成员名1类型,

成员员2类型,

……

成员名n类型);

定义记录变量格式为:

记录变量名记录类型名

也可以直接用数据表的行定义记录变量,格式为:

记录变量名表%rowtype

示例1:

declare

typexsisrecord(

xh学生信息.学号%type,

xm学生信息.姓名%type

);

xxs;

begin

select学号,姓名intoxfrom学生信息where学号='

9512101'

;

dbms_output.put_line('

学号:

'

||x.xh);

姓名:

||x.xm);

end;

示例2:

x学生信息%rowtype;

select*intoxfrom学生信息where学号='

||x.学号);

||x.姓名);

(2)PL/SQL表

为了处理单行单列的数据,可以使用标题变量;

为了处理单行多列的数据,可以使用PL/SQL记录;

而为了处理单列多行数据,就可以使用集合类型(PL/SQL表、嵌套表、变长数组)了。

这里只介绍PL/SQL表。

PL/SQL表类似于C语言中的数组,但其下表可以是负数,且PL/SQL表的个数没有限制,下标没有上下限。

声明语法如下:

TypePL/SQL表名istableof表元素的数据类型indexby表元素下标的类型

注:

表元素下标的类型为binary_integer、pls_integer或varchar2

typexxistableof学生信息.姓名%typeindexbybinary_integer;

yxx;

select姓名intoy

(2)from学生信息where学号='

||y

(2));

代码y

(2)中的2可以是任意整数,这里表示下标为2的那个元素。

2.2PL/SQL控制结构

2.2.1条件分支语句

语法如下:

If条件then

语句;

Elsif条件then

Else

语句

Endif;

这里注意:

elsif是一个单词,而endif是两个单词。

2.2.2循环语句

(1)Loop循环

Loop

语句块;

Exitwhen条件;

Endloop;

示例:

iint:

=1;

loop

dbms_output.put_line(i);

i:

=i+1;

exitwheni=10;

endloop;

没有exit语句将会死循环。

(2)while循环

语法如下:

While条件Loop

Endloop;

whilei<

10loop

(3)for循环

For循环控制变量in[reverse]最小值..最大值loop

语句组;

注意:

循环控制变量每次递增1(递减1,如果有reverse选项的话)。

foriinreverse1..10loop

2.3游标

游标的概念这里不就再多讲了。

ORACLE中分为隐含游标和显式游标,以下只涉及显式游标。

2.3.1显示游标

1.定义游标

语法格式如下:

Cursor游标名is游标所对应的select语句;

游标声明段定义。

2.打开游标

Open游标名;

打开游标的实际上就是执行定义游标语句中的select语句,并将结果暂存到结果集中。

3.提取数据

(1)一次提取一行数据

Fetch游标名into变量名1,变量名2……;

(2)一次提取多行数据

Fetch游标名intobulkcollectinto集合变量1,集合变量2……;

4.关闭游标

Close游标名;

5.显式游标属性

显式游标属性用于返回显式游标的执行信息,有4个属性:

(1)%found

若当前fetch语句成功取出一行数据,则属性值为true;

否则返回值为false。

该属性可用来判断是否应关闭游标,在循环变量中常用该属性决定循环的结束。

(2)%notfound

(1)相反

(3)%isopen

当游标已经打开且尚未关闭时,属性值为true,该属性可用来判断游标的状态。

(4)%rowcount

返回游标已检索到的数据行个数。

使用游标提取“计算机系”学生的姓名和出生日期

cursorx_cursorisselect姓名,出生日期from学生信息where系别='

计算机系'

xm学生信息.姓名%type;

sr学生信息.出生日期%type;

openx_cursor;

fetchx_cursorintoxm,sr;

exitwhenx_cursor%notfound;

dbms_output.put_line(xm||'

:

||sr);

closex_cursor;

示例2:

使用记录变量

x_recordx_cursor%rowtype;

--定义基于游标类型的记录变量

ifnotx_cursor%isopenthen

endif;

fetchx_cursorintox_record;

dbms_output.put_line(x_record.姓名||'

||x_record.出生日期);

查询的记录条数为:

||x_cursor%rowcount);

2.3.2参数游标

语法格式:

Cursor游标名(参数名参数类型)isselect语句

显示指定系别所有学生的姓名及出生日期

cursorx_cursor(xb学生信息.系别%type)is

select姓名,出生日期from学生信息where系别=xb;

openx_cursor('

信息系'

);

2.3.3使用游标更新或删除数据

更新数据格式为:

Cursor游标名[(参数名参数类型)]isselect语句forupdate[of列][nowait]

Forupdate子句用于在游标结果集上加共享锁,如果省略了of子句,则对全表加锁,否则只对指定列加锁。

在提取了游标数据之后,为了更新或删除当前游标行数据,必须在update或delete语句中引用wherecurrentof子句。

语法格式下:

Update表名set列名=表达式wherecurrentof游标名;

Deletefrom表名wherecurrentof游标名;

将成绩低于60分的减5分,高于80分的加5分。

cursorx_cursorisselect成绩from选课信息forupdateof成绩;

exitwhenx_cursor%notfound;

ifx_record.成绩<

60then

dbms_output.put_line(x_record.成绩);

update选课信息set成绩=成绩-5wherecurrentofx_cursor;

elsifx_record.成绩>

80then

update选课信息set成绩=成绩+5wherecurrentofx_cursor;

删除成绩为NULL的记录。

cursorx_cursorisselect成绩from选课信息forupdate;

x_recordx_cursor%rowtype;

ifx_record.成绩isnullthen

deletefrom选课信息wherecurrentofx_cursor;

2.3.4游标的FOR循环

游标的FOR循环简化了对游标的处理,使用游标FOR循环时,ORACLE会隐含打开游标,提取游标数据并关闭游标。

For记录变量名in游标名loop

语句组;

使用游标FOR循环显示“计算机系”学生名单

cursorx_cursorisselect姓名from学生信息where系别='

forx_recordinx_cursorloop

第'

||x_cursor%rowcount||'

个学生:

||x_record.姓名);

可以看出,在FOR循环中使用游标会更加方便。

3.过程与函数

过程和函数是被命名的PL/SQL块的子程序,可以在不同的应用程序中多次调用。

过程用于执行特定操作,函数用于返回特定的数据。

合理应用过程和函数,可以简化客户端的开发和维护,并提高应用程序的性能。

3.1存储过程

编写一个向学生信息表中插入一条记录的存储过程。

createorreplaceprocedureaddnewstu(

xm学生信息.姓名%type,

xb学生信息.系别%type)as

insertinto学生信息(学号,姓名,系别)values(xh,xm,xb);

endaddnewstu;

调用时格式为:

Call过程名(实际参数列表);

Exec过程名(实际参数列表);

3.2触发器

Createorreplacetrigger触发器名

<

before|after|insteadof>

触发事件on

database|用户模式名|表名|视图名|

referencing<

oldas旧值别名>

|<

newas新值别名>

|

<

parentas父表别名>

[foreachrow][when触发条件]

触发器体;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1