Oracle课程文档三.docx

上传人:b****0 文档编号:17941568 上传时间:2023-08-05 格式:DOCX 页数:16 大小:331.03KB
下载 相关 举报
Oracle课程文档三.docx_第1页
第1页 / 共16页
Oracle课程文档三.docx_第2页
第2页 / 共16页
Oracle课程文档三.docx_第3页
第3页 / 共16页
Oracle课程文档三.docx_第4页
第4页 / 共16页
Oracle课程文档三.docx_第5页
第5页 / 共16页
Oracle课程文档三.docx_第6页
第6页 / 共16页
Oracle课程文档三.docx_第7页
第7页 / 共16页
Oracle课程文档三.docx_第8页
第8页 / 共16页
Oracle课程文档三.docx_第9页
第9页 / 共16页
Oracle课程文档三.docx_第10页
第10页 / 共16页
Oracle课程文档三.docx_第11页
第11页 / 共16页
Oracle课程文档三.docx_第12页
第12页 / 共16页
Oracle课程文档三.docx_第13页
第13页 / 共16页
Oracle课程文档三.docx_第14页
第14页 / 共16页
Oracle课程文档三.docx_第15页
第15页 / 共16页
Oracle课程文档三.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Oracle课程文档三.docx

《Oracle课程文档三.docx》由会员分享,可在线阅读,更多相关《Oracle课程文档三.docx(16页珍藏版)》请在冰点文库上搜索。

Oracle课程文档三.docx

Oracle课程文档三

1.PL/SQL程序设计

1.1.什么是PL/SQL

♦PL/SQL(ProcedureLanguage/SQL)

♦PLSQL是Oracle对sql语言的过程化扩展

♦指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。

●把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单、高效、灵活和实用。

●Plsql(oracle),Transact-sql(SQLserver)

1.2.HelloWorld

♦写一段PL/SQL程序,在屏幕上打印“HelloWorld!

●注意:

如果要在屏幕上输出信息,需要将serveroutput开关打开:

setserveroutputon

1.3.PL/SQL程序结构

♦如果没有变量,就可以不写declare段

♦PL/SQL对大小写不敏感。

♦赋值是使用冒号等号“:

=”(中间不能有空格)

♦注释使用“--”或是“/*...*/”(就是SQL注释)

♦注意最后的end后面有个分号。

1.4.变量与赋值

1.4.1.声明变量

●说明变量(char,varchar2,date,number,boolean,long)

●记录变量分量的引用:

emp_rec.ename:

='ADAMS';

 

*属性类型有两种:

*%TYPE-引用变量和数据库列的数据类型

*%ROWTYPE-提供表示表中一行的记录类型

*使用属性类型的优点:

*不需要知道被引用的表列的具体类型

*如果被引用对象的数据类型发生改变,PL/SQL变量的数据类型也随之改变

1.4.2.赋值语句

●var1:

='thisisaargument';

●emp_rec.sal:

=sal*2+nvl(comm,0);

●sum_sal:

=sum_sal+v_sal;

●FETCHc1INTOe_eno,e_sal;

●Selectsalintopsalfromempwhere....

1.5.IF语句

1.5.1.语法

♦只有IF的情况:

♦带ELSE的情况:

♦IF...ELSEIF...ELSE的情况:

注意:

是ELSIF,不是ELSEIF。

 

1.5.2.示例

●要求:

判断用户输入的数字。

●提示:

•从键盘输入:

acceptnumprompt'请输入一个数字';

•得到键盘输入的值:

pnumnumber:

=#

1.6.循环语句

1.6.1.语法

♦Loop

♦For

♦While

 

1.6.2.示例

 

1.7.光标(Cursor)

1.7.1.使用光标

●说明光标语法:

CURSOR光标名[(参数名数据类型[,参数名数据类型]...)]

ISSELECT语句;

●用于存储一个查询返回的多行数据

例如:

cursorc1isselectenamefromemp;

●打开光标:

openc1;(打开光标执行查询)

●取一行光标的值:

fetchc1intopjob;(取一行到变量中)

●关闭光标:

closec1;(关闭游标释放资源)

●注意:

上面的pjob必须与emp表中的job列类型一致:

●定义:

pjobemp.empjob%type;

 

1.7.2.带参数的光标

执行语句:

Openc2(‘clerk’);

1.7.3.带参数的光标示例

♦写一段PL/SQL程序,为部门号为10的员工涨工资。

1.7.4.示例:

按员工的工种长工资,总裁1000元,经理长800元其,他人员长400元。

要真正的修改数据

 

游标代码

用来在PL语句中使用表结构的一个集合,。

可以再PL语句中灵活使用表的值。

语法:

--游标:

setserveroutputon;

--定义

declare

v_nameemp.ename%type;

v_salemp.sal%type;

cursorcursor_empis

selectename,salfromemp;

begin

--打开游标

opencursor_emp;

loop

--查找游标值。

fetchcursor_empintov_name,v_sal;

--退出条件找不到游标值。

exitwhencursor_emp%notfound;

dbms_output.put_line(v_name||''||v_sal);

endloop;--退出循环

closecursor_emp;--关闭游标。

end;

游标属性:

%found:

只有在DML语句影响一行或者多行时,才会返回true。

%notfound:

与上条相反。

%roucount:

返回DML语句影响的行数。

如果没影响行,则返回0

%isopen:

返回游标是否已经打开。

For简化游标

setserveroutputon;

declare

v_nameemp.ename%type;

v_salemp.sal%type;

cursorcursor_empis

selectename,salfromemp;

begin

forempssincursor_emploop

dbms_output.put_line('第'||cursor_emp%rowcount||'为雇员'||empss.ename||''||empss.sal);

endloop;

end;

1.8.例外(异常)

♦例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。

1.8.1.Oracle的异常处理

●系统定义例外

•No_data_found(没有找到数据)

•Too_many_rows(select…into语句匹配多个行)

•Zero_Divide(被零除)

•Value_error(算术或转换错误)

•Timeout_on_resource(在等待资源时发生超时)

●用户定义的例外

手动抛出运行异常

语法:

raise_application_error(异常编号,’异常处理语句’)

PS:

手动抛出的异常必须低于0

●错误号:

错误号就是异常编号,用于处理异常的。

由于系统占用了编号,所以用户只能使用-20000到-20999之间的编号。

●演示:

系统定义例外(被0除)

1.8.2.演示:

用户定义例外及处理例外

●在declare节中定义例外

•out_ofexception;

●在可行语句中引起例外

•raiseout_of;

●在Exception节处理例外

•whenOut_ofthen…

Plsql异常

--异常处理语句。

begin

dbms_output.put_line("asd");

--代码异常。

exception

whenaccess_into_nullthen

sequence_of_statements;

whenothersthen

rollback;

raise;

End

自定义处理异常

--异常处理语句。

--设置output的输出显示。

setserveroutputon;

--设置一个自定义的异常

declareu_nullexception;

begin

--抛出异常

raiseu_null;

--处理异常

exception

--捕获异常

whenu_nullthen

dbms_output.put_line('ccc1');

--其他异常捕获

whenothersthen

dbms_output.put_line('ccc2');

end;

 

1.9.PLsql命名细节:

标识符

命名规则

例子

程序变量

V_name

V_student_name

程序常量

C_name

C_company_name

异常标志

E_name

E_too_many

游标变量

Cursor_name

Cursor_emp

表类型

Name_table_type

Emp_record_type

Name_table

Emp_table

记录类型

Name_record

Emp_record

绑定变量

G_name

G_year_sal

在11G中的新特性:

是赋值语句中访问序列:

语法:

V_name:

=emp_sqe.nextVal;

 

1.10.实例

1.10.1.实例1:

按员工的工种长工资,总裁1000元,经理长800元,其他人员长400元

1.10.2.实例2:

统计每年入职的员工个数

1.10.3.实例3:

为员工涨工资,从最低工资调起,工资总额不能超过5万元

1.10.4.案例4:

实现按部门分段(6000以上、(6000,3000)、3000元以下)统计各工资段的职工人数、以及各部门的工资总额

题目:

用PL/SQL语言编写一程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)统计各工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金),参考如下格式:

●提示:

可以创建一张新表用于保存数据

createtablemsg1

(deptnonumber,

emp_num1number,

emp_num2number,

emp_num3number,

sum_salnumber);

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

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2