PLSQL程序设计(访问oracle数据库效率最高的语言)

本文详细介绍了PLSQL的基本程序结构,包括变量声明、输出语句、引用型和记录型变量的使用,以及if语句、while和for循环、光标操作和异常处理。通过实例展示了如何在PLSQL中进行条件判断、循环控制和数据查询,帮助理解其作为访问Oracle数据库高效语言的特点。

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

PLSQL是对sql语言的扩展,是面向过程的语言


程序结构:

set serveroutput on   --打开oracle输出开关

declare

      --说明部分(变量,光标或者例外)

begin

     ---程序体

     dbms_output.put_line('Hello world');  --输出语句

end;

***********************************************************************************************************************************************************

eg1:

declare

  --声明变量

  pnumber number(7,2);

  pname varchar2(20);

  pdate date;

begin

  --赋值

  pnumber:=1;

  dbms_output.put_line(pnumber);


  pname:='tom';

  dbms_output.put_line(pname);


  pdate:=sysdate;

  dbms_output.put_line(pdate);

end;

***********************************************************************************************************************************************************

引用型变量:my_name emp.ename%type


set serveroutput on
declare
  --声明引用型变量 
  pname emp.ename%type;
  psalary emp.salary%type;
begin
  --程序体
  select ename,esalary into pname,psalary from emp where eno = 7890;
  --输出
  dbms_output.put_line(pname||'的薪水是'||psalary);
end;
***************************************************************************************
记录型变量:emp_rec emp%rowtype  (取表中的一行数据,可以看做是一个数组)


set serveroutput on
declare
  --定义记录型变量
  emp_rec emp%rowtype;
begin
  --获取行信息
  select * into emp_rec from emp where eno = 7890;
  --输出
  dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.esalary);
end;
***************************************************************************************
if语句:


set serveroutput on
--从键盘接收一个输入,num:地址值,含义是:在该地址上保存了输入的值
accept num prompt'请输入一个数组:'; 
declare 
  --定义变量保存用户输入的数据
  pnum number:=#
begin
  --程序体
  if pnum = 0 then dbms_output.put_line('您所输入的值是0');
  elsif pnum = 1 then dbms_output.put_line('您所输入的值是1');
  elsif pnum = 2 then dbms_output.put_line('您输入的值是2');
  else dbms_output.put_line('其他数字');
  end if;
end;
***************************************************************************************
while循环语句:(当循环条件成立时执行loop里的代码)


set serveroutput on;
declare
  pnum number:=1;
begin
  --循环体
  while(pnum<10) loop
  dbms_output.put_line(pnum);


  pnum = pnum + 1;
  end loop;
end;


loop循环:(当条件成立时退出循环)------------------推荐使用


set serveroutput on
declare
  pnum number:=1;
begin
  --循环体
  loop
  exit when pnum>10; --当条件成立时退出循环
  dbms_output.put_line(pnum);
  pnum = pnum +1;
  end loop;
end;


for循环:


set serveroutput on
declare
  pnum number:=1;
begin
  for pnum in 1..10 loop
  dbms_output.put_line(pnum);
  end loop;
end;
***************************************************************************************


光标:(就是一个结果集,相当于ResultSet)
/*
1、光标的属性:
%found     :取到数据时为true
%notfound  :没有取到数据时为true
%isopen    :判断光标是否打开
%rowcount  :影响的行数
2、默认情况下,oracle数据库只允许在同一会话中打开 300个光标
  修改光标数的限制数
  alter system set open_cursors = 400 scope = both;
*/
cursor c1 is select ename from emp; --定义一个光标(c1),就是is后面的select语句
open c1;--打开光标执行查询
fetch c1 into pename; --取一行光标的值放入变量中
close c1;  --关闭光标


eg:
set serveroutput on
declare
  --定义光标
  cursor cemp id select ename,salary from emp;
  --为光标定义相应的变量
  pname   emp.ename%type;
  psalary emp.salary%type;
bengin
  --打开光标  
  open cemp;
  --循环输出光标里面的内容
  loop
  fetch cemp into pname,psalary;
  exit when cemp%notfound;  --光标没有取到值时退出循环


  dbms_output.put_line(pname||'的薪水是'||psalary);


  end loop;
  --关闭光标
  close cemp;


  --注意:当在plsql中对数据库做更改时,最后一定要提交才能生效
  commit;
end;
======================================
set serveroutput on
declare 
  --定义光标
  cursor cemp id select ename,salary from emp;
  --定义变量
  pname    emp.ename%type;
  psalary  emp.salary%type;
begin
  --打开光标
  open cemp;
  --程序体
  if cemp%isopen then 
     dbms_ouput.put_line('光标已经打开');  
  else 
     dbms_output.put_line('光标没有打开');
  --关闭光标
  close cemp;
end;
======================================
带参数的光标
set serveroutput on
declare
  --定义光标
  cursor cemp(dno number) id select ename,salary from emp where deptno = dno;
  --定义变量
  pname   emp.ename%type;
  psalary emp.esalary%type;
begin
  --打开光标
  open cemp(10);
  --程序体
  loop
  fetch cemp into pname,psalary;
  exit when cemp%notfound


  dbms_output.put_line(pname);


  end loop;
  --关闭光标
  close cemp;
end;


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


系统例外:no_data_found
set serveroutput on
declare
  --定义变量
  pname emp.ename%type;
begin
  select ename into panme from emp where eno = 1234;


  exception
  when no_data_found then dbms_output.put_line('没有找到该员工');
  when others then dbms_output.put_line('其他例外');
end;


系统例外:too_many_rows
set serveroutput on
declare
  --定义变量
  pname emp.ename%type;
begin
  select ename into panme from emp where deptno = 10;


  exception
  when too_many_rows then dbms_output.put_line('select into 匹配了多行');
  when others then dbms_output.put_line('其他例外');
end;


系统例外:zero_dived,value_error,


自定义例外:raise 抛出自定义例外
***************************************************************************************


plsql程序设计:


瀑布模型:
1、需求分析
2、设计(概要设计,详细设计)
3、编码Coding
4、测试
5、上线


SQL语句:
select to_char(joindate,'yyyy') from emp;
-->集合-->光标-->循环-->退出条件:notfound

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值