PL/SQL基本语法

PL/SQL(Procedure Language/SQL)

PL/SQL是Oracle对sql语言的过程化扩展,在sql命令语言中增加了过程处理语句(分支,循环等),使sql语言具有过程处理能力。把sql语言的数据操作能力与过程语言的数据处理能力结合起来,是的PLSQL面向过程但比过程语言简单,高效,灵活。

PL/SQL的语法

declare 
	--说明部分(变量说明,光标申明,列外说明)
begin
	--语句序列(DNL语句)
exception
	--列外处理语句
END;

1,打印hello world

declare
	--说明部分
begin
	--程序
	dbms_output.put_line("hello world");
end;

2,引用型变量

--查询并打印7839的姓名和薪水
declare
	--定义变量保存姓名和薪水
	--pename varchar2(20);
	--psal number;
	pename emp.ename%type;
	psal emp.sal%type;
begin
	--得到7839的姓名和薪水
	select ename,sal into pename,psal from emp where empno=7839;
	--打印
	dbms_output.put_line(pename||'的薪水是'||psal);
end;

3,记录行变量

--查询并打印7839的姓名和薪水
declare
	--定义记录行变量:代表一行
	emp rec_emp%rowtype;
begin
	select * into emp_rec from emp where empno=7839;
	dbms_output.put_line(emp_rec.ename||'的薪水是'||emp._rec.sal);
end;

4,循环

--打印1~10
declare
	--定义变量
	pnum number :=1;
begin
	loop
		--退出条件
		exit when pnum > 10;
		--打印
		dbms_output.put_line(pnum);
		--+1
		pnum := pnum +1;
	end loop;
end;

5,光标(游标)

光标(游标)就类似与java中的集合,它可以存储查询返回的多条数据。

语法:

cursor 游标名 [(参数名 数据类型,参数名 数据类型…)] is select …;

例如:

cursor c1 is select ename from emp;

游标的使用步骤:

  • 打开游标: open c1; (打开游标执行查询)
  • 取一行游标的值:fetch c1 into pjob; (取一行到变量中)
  • 关闭游标:close c1; (关闭游标释放资源)
  • 游标的结束方式:exit when c1%notfound

例: 查询并打印员工的姓名和薪水

declare
	--定义光标
	cursor cemp is select ename,sal from emp;
	pename emp.ename%type;
	psal emp.sal%type;
begin
	--打开
	open cemp;
	loop
		--取当前记录
		fetch cemp into pename,psal;
		--exit when 没有取到记录;
		exit when cemp%notfound;
		dbms_output.put_line(pename||'的薪水是'||psal);
	end loop;
	--关闭
	close cemp;
end;

例外(异常)

  • no_data_found (没有找到数据)
  • too_many_rows (select…into语句匹配多个行)
  • zero_divide (被零除)
  • value_error (算术或转换错误)
  • timeout_on_resource (在等待资源是发生超时)

自定义例外

--查询50号部门的员工
declare
	cursor cemp is select ename from emp where deptno=50;
	pename emp.ename%type;
	--自定义例外
	no_emp_found exception;
begin
	open cemp;
	--取第一条记录
	fetch cemp into pename;
	if cemp%notfound then
		--抛出例外
		raise no_emp_found;
	end if;
	--进程:pmon进程(proccesss monitor)
	close cemp;
exception
	when no_emp_found then dbms_output.put_line(“没有找到员工”);
	when others then dbms_output.put_line("其他例外")
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值