Oracle plsql 与存储过程

本文介绍了PL/SQL的基础知识,包括结构、变量定义与赋值、流程控制及游标的使用等,并提供了多个示例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.2 plsql结构

PL/SQL可以分为三个部分:声明部分、可执行部分、异常处理部分。

declare
	--声明变量,游标
	i integer;
begin
	--执行语句
	--【异常处理】
end;	

1.3 hello world

declare
	i integer
begin
	DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
END;

说明:如果没有显示打印内容,可以通过以下设置进行设置


1.4 变量

PLSQL编程中常见的变量分两大类:

1、普通数据类型(char、varchar2、date、number、boolean、long)

2、特殊变量类型(引用型变量、记录型变量)

声明变量的方式

-- 变量名 变量类型(变量长度)
v_name varchar(20)
1.4.1 普通变量

变量赋值的方式有两种:

1、直接赋值语句:= 比如: v_name :='zhangsan'

2、语句赋值,使用select...into...赋值

【示例】打印人员个人信息,包括:姓名,薪水,地址

declare
	--姓名
	v_name varchar2(20) :='zhangsan';
	--薪水
	v_sal number;
	--地址
	v_addr varchar2(200);
begin
	--直接赋值
	v_sal := 1580;
	--语句赋值
	select 'shanghai' into v_addr from dual;
	DBMS_OUTPUT.PUT_LINE('姓名:'||v_name||',薪水:'||v_sal||',地址:’||v_addr);
end;
1.4.2 引用型变量

变量的类型和长度取决于表中字段的类型和长度

通过表名.列名%TYPE指定变量的类型和长度,例如:v_name emp.ename%TYPE

【例子】查询emp表中7839 号员工的个人信息、打印姓名和薪水

declare
	--姓名
	v_name emp.ename%type :='zhangsan';
	--薪水
	v_sal emp.sal%type;
	--地址
	v_addr emp.addr%type;
begin
	--直接赋值
	v_sal := 1580;
	--语句赋值
	select 'shanghai' into v_addr from dual;
	DBMS_OUTPUT.PUT_LINE('姓名:'||v_name||',薪水:'||v_sal||',地址:’||v_addr);
end;
1.4.3 记录型变量

接受表中的一整行记录,相当于java 中的一个对象

语法:变量名称 表名%rowtype,例如:v_emp emp%rowtype;

【例子】查询打印123号员工的姓名和薪水

declare
	v_emp emp%rowtype;
begin
	select * into v_emp from emp where empno = 123;
	DBMS_OUTPUT.PUT_LINE('姓名:'||v_emp.ENAME||',薪水:'||v_emp.sal||',地址:’||v_emp.addr);
END;

使用场景:如果表字段比较多的时候,声明变量会变得比较麻烦,可以使用记录型变量解决这个问题。

说明:

1、记录型变量只能存储一个完整的行数据

2、查询返回的行数太多,记录型变量接收不了。

1.5. 流程控制

1.5.1 条件分支

语法:

begin
	if 条件1 then 执行1
	elsif 条件2 then 执行2
	else 执行3
	end if;
end;
1.5.2 循环

Oracle 中有三种循环方式,我们这说的是其一 loop循环

语法:

begin
	loop
		exit when 退出循环条件
	end loop;
end;
	

【例子】

declare
	v_num number := 1;
begin
	loop
	exit when v_num > 10;
	DBMS_OUTPUT.PUT_LINE(V_NUM);
	-- 循环变量自增
	v_num := v_num +1;
	end loop;
end;

2.游标

2.1 什么是游标

用于临时存储一个查询返回的多行数据(结果集类似java找那个resultset集合),通过遍历游标,可以逐行访问处理该结果集中数据。

游标的使用方式:声明–>打开–>读取–>关闭

2.2 语法

游标声明:

cursor 游标名[(参数列表)] is 查询语句;

游标的打开:

open 游标名;

游标的取值:

fetch游标名 into 变量列表;

游标关闭:

close 游标名

2.3 游标的属性

属性返回值类型说明
%ROWCOUNT整形获得fetch语句返回的数据行数
%FOUND布尔型最近的fetch语句返回一行数据为真,否则为假
%NOTFOUND布尔型与%FOUND相反
%ISOPEN布尔型游标已经打开时为真,否则为假

%NOTFOUND 通常用来判断退出循环条件

2.4 创建和使用

【例子】使用游标查询emp表中所有员工姓名和工资

declare
	--1、声明游标
	cursor c_emp is 
		select ename,sal from emp;
	-- 声明变量给游标复制
	v_name emp.ename%type;
	v_sal emp.sal%type;
begin
	--2、打开游标
	open c_emp;
	loop
		--3、游标取值
		fetch c_emp into v_name,v_sal;
		exit when c_emp%notfound;
		dbms_output.put_line('姓名:'||v_name||'薪水:'||v_sal);
	end loop;
	--4、关闭游标
	close c_emp;
end;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值