oracle数据库之PL/SQL程序结构(上)

最简单的PL/SQL程序

declare

begin

dbms_output.put_line(‘HelloWorld’);--注意是单引号

end;

/

这个是在dos窗口里所应该写的,但是在pl/sql工具里不需要/结束标志;

首先应该注意的是:

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

setserveroutputon

那让我们首先了解一下什么是PL/SQL以及程序结构的组成

PL/SQLProcedureLanguage/SQL

PLSQLOraclesql语言的过程化扩展

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

SQL优点:交互式非过程化;数据操纵功能强;自动导航语句简单;调试容易使用方便。

PL/SQL程序结构

declare

说明部分(变量说明,光标申明,例外说明〕

begin

语句序列(DML语句〕…

exception

例外处理语句

End;

/

在这里提示一下pl/sql的注释是--或者用/**/

变量和常量的说明:

varlchar(15);--说明变量名、数据类型和长度后用分号结束说明语句。

marriedboolean:=true;--注意这里的赋值有什么区别

psalnumber(7,2);--表示psal最大有7位数,两位为小数

my_nameemp.ename%type;--表示myname类型为emp表中的ename的类型

emp_recemp%rowtype;--代表记录型变量,这是一整条记录

if语句的三种表达式:详情请看实例http://blog.csdn.net/liuxiaogangqq/article/details/8779447

1.IF条件THEN语句1;

语句2;

endif;

2.IF条件THEN语句序列1

ESLE语句序列2

ENDIF

3.IF条件THEN语句;

ELSIF语句THEN语句;

ELSE语句;

ENDIF;

IF语句示例:

acceptnumprompt'请输入数字';--接收键盘输入的值会自动保存num的值

declare--声明

pnumnumber:=#--&代表取值pnum格式声明变量变量类型

begin

dbms_output.put_line(pnum);

end;

循环语句:

第一种:

WHILEtotal<=25000LOOP

...

total:=total+salary;

ENDLOOP;

第二种:

Loop

EXIT[when条件];

……

Endloop

第三种:

FORIIN1..3LOOP

语句序列;

ENDLOOP;

接下来讲一下重点的光标:

说明光标语法:

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

ISSELECT语句;

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

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

取一行光标的值:fetchc1intopjob;(取一行到变量中)

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

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

定义:pjobemp.job%type;

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

---隐式游标

declare--声明

emp_recemp%rowtype;--记录

begin

foremp_recin(select*fromemp)--in变量变量必须是游标

loop--循环的开始

dbms_output.put_line('员工名称:'||emp_rec.ename);

endloop;--循环的结束

end;

--带参数的游标

declare

cursorcl(pnonumber)isselect*fromempwhereempno=pno;--查询出所有的emp记录存储到cl游标中

begin

foremp_rowincl(7499)--打开游标(自动)检索数据(自动)关闭游标(自动)emp_row变量也不需要定义

loop

dbms_output.put_line(emp_row.ename);

endloop;

end;

例外

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

Oracle的异常处理

系统定义例外

No_data_found(没有找到数据)

Too_many_rows(selectinto语句匹配多个行)

Zero_Divide(被零除)

Value_error(算术或转换错误)

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

用户定义的例外

declare

no_dataexception;--设定一个例外名字

emp_rowemp%rowtype;--记录性变量

cursorcl(pnonumber)isselect*fromempwhereempno=pno;--定义游标pno查询emp中与员工号相等的数据

begin

opencl(0000);--为游标赋值

fetchclintoemp_row;--cl中取出数据给emp_row

ifcl%notfoundthenraiseno_data;--在这里抛出例外判断语句

endif;

closecl;

exception--在这里捕获例外

whenno_datathen

dbms_output.put_line('没有找到数据');

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值