PL/SQL编程基础部分

2025-01-19 13:00

一、为什么要学PL/SQL编程

使用PLSQL语言操作Oracle数据库的效率最高。

之前用sql语句是命令式的语言,但如果案例是复杂的,比如需要分条件来做不同的事情的,就需要PL/SQL效率会更高,不需要用其他的编程语言。

  • PL/SQL介绍

全称是Procedure Language/SQL,是oracle对sql语言的过程化扩展

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

(1)是sql的扩展,支持sql语句。

(2)是面向过程的语言。

二、语句块通用格式

declare
    --说明部分(变量说明、光标申明、例外说明)
begin
    --程序体(DML语句)
    dbms_output.put_line('Hello World');
exception
    --例外处理语句
end;
/
/    --这个正斜杠用来退出前面的代码编写并且执行语句
--查看程序包的结构
desc 程序包名字

三、打开输出开关

set serveroutput on

四、不同数据库中SQL扩展

  • Oracle:PL/SQL

  • DB2:SQL/PL

  • SQL Server:Transac-SQL(T-SQL)

五、PL/SQL的说明部分

  • 定义基本变量

    类型:char,varchar2,date,number,boolean,long

举例:名字在片面,变量是在后面,:=为赋值符号不是单=号

var1      char(15);
married   bollean := true;
psal      number(7,2);  --说明有两位小数
  • 定义引用型变量

my_name emp.ename%type;  --引用ename的类型,ename是啥类型变量就是啥类型

第二种赋值方式:

select ename,sal into pename,psal from emp where empno=7839;

这里的into就可以赋值,是一一对应的。

  • 定义记录型变量

emp_rec emp%rowtype;   
--取表中一行的类型,作为变量的类型,可以理解为数组,如果需要取用到列里面的某一行,就像如下写法:
emp_rec.ename := 'ADAMS';   --ename是列的名字。

六、PL/SQL的流程控制语句

(1)if语句:

情况一

if 条件 then 语句1;
语句2;
end if;

情况二

if 条件 then 语句序列1;
else 语句序列2;
end if;

情况三

if 条件 then 语句;
elsif 语句 then 语句;    --特别注意下elsif
else 语句;
end if;

(2)while循环:

while total <= 25000 loop
...
total := total + salary;
end loop;

(3)loop循环:

--在控制光标的时候比较简单
loop
exit[when 条件];
......
end loop;

(4)for循环:

for i in 1..3 loop   --表示连续区间用这种写法
语句序列;
end loop;

七、光标

(1)光标的引入背景

select如果返回的结果有多行的话就会出错,所以需要引入光标,光标cursor就是一个结果集。也叫游标。

(2)光标的语法

cursor 光标名 [(参数名 数据类型[,参数名 数据类型]...)] is select 语句;

cursor c1 is select ename from emp;

此外,光标是可以带参数的。

(3)光标的一些操作

  • 打开光标:

open c1;(打开光标执行查询)
  • 关闭光标:

close c1;(关闭游标释放资源)
  • 取一行光标的值:

fetch c1 into pename; (取一行到变量中)
  • fetch的作用:

(1)把当前指针指向的记录返回;

(2)将指针指向下一条记录。

(4)光标的属性

  • %found(光标能取到内容返回true,否则false)

  • %notfound(与前者相反)

  • %isopen:判断光标是否打开

  • %rowcount:影响的行数,不是总行数,比如光标取走了10行的数据,那么这个值就是10

(5)光标的限制

默认情况下,oracle数据库只允许在同一个会话中打开300个光标

  • 修改光标数的限制:

alter system set open_cursors=400 scope=both; 

scope是范围,取值有三个:both, memory(只更改当前实例), spfile(只更改参数文件,数据库需要重启)

八、例外

(1)例外的概念

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

(2)例外的分类

  • 系统例外

  • 自定义例外

(3)系统例外

  • no_data_found 没有找到数据,select语句没有找到结果的时候

  • too_many_rows select...into语句匹配多个行

  • zero_divide 被零除

  • value_error 算术或转换错误

  • timeout_on_resource 在等待资源时发生超时(分布式数据库的访问会用到)

(4)自定义例外

定义变量,类型是exception

使用raise关键字抛出自定义例外

九、程序设计方法

瀑布模型:

需求分析
	设计1.概要设计2.详细设计
		编码Coding
			测试Testing
				上线

以上步骤就像水流一下,最忌讳一上来就编码。

想明白SQL语句、变量。

变量:1.初始值是多少2.最终值如何得到

十、其他小技巧:

  • 使用||符号来连接文本字符串。

  • --表示单行注释,/* */表示多行输入

  • 单个等于号表示判断。

  • plsql中大小写不敏感。

  • then语句相当于一个大括号,后面的语句可以一起被处理,比如如下写法:

when zero_divide then dbms_output.put_line('1:0不能做被除数');
                          dbms_output.put_line('2:0不能做被除数');

这里两句话都会被打印出来。

  • 把握一个原则:能不操作数据库就不操作数据库,比单单加减乘除的计算慢。

===================================================================================

相关文章
热点文章
精彩视频
Tags

在线访客: 今日访问量: 昨日访问量: 总访问量:

×
请扫码支付

扫码支付后自动跳转查看