使用pl/sql编程

一、pl/sql简介
1、概述
pl/sql(Procedual Language/SQL)是oracle在数据库中引入的一种过程化编程语言。PL/SQL在SQL的基础之上,可以编写包含SQL语句的程序。
2、块
PL/SQL程序是以块block为基本单位,分为匿名块和命名块。
整个PL/SQL块分为3个部分:
1)声明(用declare)
2)执行部分(begin)
3)异常处理(exception)
语法:
declare
–声明部分,可选。声明常量、变量或游标
begin
–执行部分,必选。程序的主体,完成逻辑控制和运算
exception
–异常部分,可选。纠正错误或给错误信息提示
end; --结束
/ --告诉oracle代码结束了

注意:在PL/SQL块中,每一条语句必须以分号结束

经验:
set serveroutput on;设置在服务器端可以显示执行结果的功能。在一个命令窗口之中,只需要开一次

dbms_output.put_line():输出语句。类似java中的System.out.println();

&age:可以把用户输入的值给age


示例:
set serveroutput on;
begin
    dbms_output.put_line(123);
end;
/	--代表pl/sql程序结束

二、程序结构
1、组成部分和注释
1)单行注释:–
2)多行注释:以/开始,/结束
2、常量和变量 int a=3;
1)定义变量
<变量名> <数据类型>[(长度):=<初始值>]
例如:
age number; --声明变量
score number :=6.2; --声明数值类型变量,并赋值
name varchar2(10):=‘杨老师’;–声明字符串变量,并赋值
2)定义常量
<常量名> constant <数据类型>:=<常量值>;
例如:
pi constant number:=3.14; --声明数值常量,并赋值
a constant int:=5; --声明整数常量,并赋值

3、数据类型
1)number:数值
2)varchar2(length):可变长度字符。最大长度4000字节
3)date:日期类型
4)boolean:布尔类型。true或false
4、特殊数据类型
1)表名.列名%type:可以声明一个与指定列名类型相同的数据类型,通常紧跟在指定列名的后面
declare
stuname ruanjian171.name%type; --声明变量,类型和ruanjian171表中name列的类型相同
begin
select name into stuname from ruanjian171 where stuno = ‘1710272101’;
dbms_output.put_line(stuname);–输出
end;
/

3)表名%rowtype:
结合了%type和%record类型变量的优点。可以根据数据表中行的结构定义一种特殊的数据类型,用来保存从数据表查询的一行数据。

declare
stu ruanjian171%rowtype; --声明变量,类型和ruanjian171表中一行的类型相同
begin
/从ruanjian171表中查询出姓名是“蔡浩东”的学生信息,赋值给变量stu/
select * into stu from ruanjian171 where name = ‘蔡浩东’;
dbms_output.put_line(‘学号:’ || stu.stuno);
dbms_output.put_line(‘姓名:’ || stu.name);
dbms_output.put_line(‘性别:’ || stu.sex);
dbms_output.put_line(‘班级:’ || stu.classname);
end;
/

三、流程控制
1、条件控制
1)if-then语句
语法:
if(条件) then
–语句
end if;
例如:
declare
a number := &a; --声明变量a,赋值为5
b number := &b; --声明变量b,赋值为3
begin
if (a > b) then --如果a>b成立
dbms_output.put_line(a || ‘大于’ || b); --输出结果
end if; --结束if语句
end; --结束块
/

2)if-then-else语句。相当于java中的if-else
语法:
if(条件) then
–语句1
else
–语句2
end if;
3)if-then-elsif语句。多分支条件判断,相当于java中的多重if
语法:
if(条件1) then
–语句1
elsif(条件2) then
–语句2

else
–语句n
end if;

例如:
/*判断学生的成绩。
如果成绩>=90,优秀;如果>=80,良好;如果>=70,中等;如果>=60,及格;否则,不及格
*/
declare
score int := &score; --声明变量score,并赋值
begin
if (score >= 90) then
dbms_output.put_line(‘优秀’);
elsif (score >= 80) then
dbms_output.put_line(‘良好’);
elsif (score >= 70) then
dbms_output.put_line(‘中等’);
elsif (score >= 60) then
dbms_output.put_line(‘及格’);
else
dbms_output.put_line(‘不及格’);
end if;
end;
/

4)case语句。相当于java中的switch语句
语法:
case <选择器>
when <条件1> then 语句1;
when <条件2> then 语句2;

when <条件n> then 语句n;
end case;

例如:
/考试成绩第1名,老师请吃麻辣香锅;第2名,老师请吃麻辣烫;第3名,老师请吃辣椒酱;其他情况,请自便/
declare
rank int := &rank; --声明变量,赋值
begin
case rank --判断rank的值
when 1 then
dbms_output.put_line(‘老师请吃麻辣香锅’);
when 2 then
dbms_output.put_line(‘老师请吃麻辣烫’);
when 3 then
dbms_output.put_line(‘老师请吃辣椒酱’);
else
dbms_output.put_line(‘凉水泡馍,请自便’);
end case;
end;
/

2、循环控制。
当程序需要反复执行某一操作时,就要使用循环结构
四个组成:
初始条件
循环条件
循环操作
循环变量

1)loop语句。先执行,再判断。类似于java中的do-while
语法:
loop
循环语句
exit when 结束条件;
end loop;
例如:
/求1-100的数字之和,并输出/
declare
i int := 1; --声明初识条件
he int := 0; --声明变量,保存数字之和
begin
loop
he := he + i; --累计相加
i := i + 1; --自加1
exit when i > 100; --当i>100时,退出循环
end loop;
dbms_output.put_line(‘数字之和是:’ || he);
end;
/
2)while语句。先判断,在执行
语法:
while 条件语句 loop
循环操作
end loop;

例如:
/求1-100的数字之和,并输出/
declare
i int := 1; --声明初识条件
he int := 0; --声明变量,保存数字之和
begin
while i <= 100 loop
he := he + i;
i := i + 1;
end loop;
dbms_output.put_line(‘数字之和是:’ || he);
end;
/

3)for语句。可以控制循环次数
语法:
for 循环变量 in [reverse] 最小值…最大值 loop
循环语句
end loop;
例如:
/求1-100的偶数之和,并输出/
declare
he int := 0;
begin
for i in 1 … 100 loop
if (mod(i, 2) = 0) then
he := he + i;
end if;
end loop;
dbms_output.put_line(‘偶数之和是:’||he);
end;
/

四、异常处理
1、预定义异常。数量较少,20个左右
当PL/SQL程序违反了oracle系统内部规定的设计规范时,就会自动引发预定义的异常。
例如:
/计算两个数字的商/
declare
num1 int :=&num1;
num2 int :=&num2;
begin
dbms_output.put_line(‘两个数的商是:’ || num1 / num2);
exception
when zero_divide then
dbms_output.put_line(‘分母不能为0’);
end;
/

2、自定义异常
例如:
/从ruanjian172表中,删除张三的数据,如果不存在,抛出异常/
declare
noexist exception;–声明自定义异常
begin
delete from ruanjian172 where name = ‘张三’;–删除张三的数据
if (sql%notfound) then --如果没有发现
raise noexist; --抛出异常
else
dbms_output.put_line(‘删除成功’);
end if;
exception
when noexist then --如果没有数据
dbms_output.put_line(‘该学生不存在’);
end;
/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值