PLSQL编程 (期末考试用)

PL/SQL程序结构

目的:实现复杂的业务逻辑

基本结构

基本结构:块

块与块之间可以可以相互嵌套

块包括:声明部分,执行部分,异常处理部分

  1. 声明部分:

    用于定义常量、变量、游标、异常和复杂数据类型等;

  2. 执行部分:

    用于实现应用模块功能,该部分包含需要执行的PL\SQL语句和SQL语句;

  3. 异常处理部分:

    用于执行部分可能出现的运行错误。

基本语法

declare -- 有变量声明的时候写;
-- 声明
-- 变量 变量名 数据类型; (直接赋值)变量名 数据类型:=值;
-- 常量 名 constant 数据类型: = ?;
-- 游标
-- 异常 名exception;
-- 一些复杂的数据类型 %rowtype %row table 可以没有声明
begin -- 必须有
-- 主要核心代码,sql处理
-- 1、给变量赋值 select 列1,列2...... into 变量1,变量2 from table where 条件
--2、insert update select delectable
-- 3判断、循环
exception
-- 付begin中的代码有异常的进行处理。
when 异常类型 then dbms_output.put_line(); -- 输出异常
-- 多个异常 
when ......
when others......-- 也可以没有异常

end; --必须有 

-- 示例:用匿名块来表达一下接收用户输入的员工编号,输出改员工的姓名,以及处理用户输入的员工编号不存在的异常:
declare
  v_empno number(5):=&e;--接收录入值:&固定;e随便起
  v_ename varchar2(200);
begin
	-- 具体代码,select into 给变量赋值
  select ename into v_ename from emp where empno=v_empno;
  -- 输出system.out.print || 字符串拼接;
  dbms_output.put_line('姓名为:'|| v_ename);
exception 
-- 异常处理 no_data_found 没有查到任何内容;输出异常信息
  when no_data_found then dbms_output.put_line('查无此人');
end;


-- 圆周率 圆面积 π 半径 面积
declare 
	v_pai constant number(7,2):=3.14; -- constant 常量值;
	v_r number(3,1):= &e;
	v_area number(9,2);
begin
	v_Area:=v_pai*v_r*v_r;
	dbms_output.put_line(v_area);
end;

-- sql块中可以放那些语句
-- select into
-- update、insert、delete、commit、rllback;
-- drop table、alter table、create table、select;
-- declare  有变量声明的时候
begin
	select * from emp;
	end;

编程规则

  1. 每条语句必须以分号结束。一条语句可以写多行,一行可以写多个语句
  2. END后必须有分号
  3. 只能用DML语句, 不能用DDL语句

PL块分类

  1. 匿名块:无名,只执行一次
  2. 子程序:带名字,可存储,多次使用
  3. 触发器:满足触发事件就自动执行相应的;DBMS自动维护;与用户无关的;目的:可保证数据库的安全

变量

简单变量,复合变量

标量变量

定义

赋值

直接赋值
select into赋值

成功前提条件:into语句前后要类型匹配,数量匹配

%TYPE

使用某列的属性来对变量进行数据类型规定

可以在操作中,一定保证类型一致

优点:

  1. 所引用的数据库中的表列的数据类型及长度可以不必知道
  2. 所引用的数据库的=中表列的数据类型可以实时改变;但不会影响%TYPE类型变量的声明和使用。使得表的结构和程序的结构是分开的
  3. 提高块的效率和健壮性

%ROWTYPE

类似结构体

保存一行的属性保持一致,属性名也是相同的,一一对应

定义

变量名 表名%ROWTYPE

取值

.属性名

替换变量

目的为了增强交互性

变量名前增加了&

在声明中,执行部分中,变量前增加了&就会等待输入

本质是原封不动的替换下面的&e

declare
  v_empno number(5):=&e;--接收录入值:&固定;e随便起
  v_ename varchar2(200);

注意:

  1. 数值型可直接输入
  2. 字符型或date需要加单引号
  3. 如果语句中增加了单引号,就不需要输入了单引号
Sno=&sno
Sno='&sno'

控制结构

也有三种

条件结构

if

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

case

case 选择变量名
	when 表达式1 then 语句序列1;
	when 表达式1 then 语句序列1;
	when 表达式1 then 语句序列1;
	when 表达式1 then 语句序列1;
	else 语句序列
end case;

pl语言里,匹配之后直接运行到END

循环结构

loop

-- 基本loop循环
loop
	执行语句;
	exit [when <条件>];
end loop;

-- 条件为真就退出
-- 没有when就遇到exit就退出

while loop

while <条件> loop
	执行语句;
end loop;

条件为真执行

for loop

for 控制变量 in [reverse] 下限..上限 loop
	执行语句:
end loop;
-- 1-100的和
declare v_sum number(4):=0;
begin
	for v_count in 1..100 loop
		v_sum:=v_sum + v_count;
		dbms_output.put_line('V_count 当前的值为' || v_count)
	end loop;
	dbms_output.put_line('V_sum 当前的值为' || v_sum)
end;

异常处理

exception

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值