存储过程之使用介绍

存储过程

1.PLSQL(Procedure Lanauge/SQL)

PLSQL概念:指在sql命令语言中增加了过程处理语句(分支,循环等),使sql语言具有过程处理能力

PLSQL分为三部分:声明部分,执行部分,异常处理部分


1.1 变量

1.1.1 普通变量
declare
    --直接赋值
    name varchar2(32) := '你好';
	--语句赋值
    sal number;
begin
    --语句赋值
    select 30 into sal from dual;
	--输出到DBMS
	Dbms_Output.put_line('姓名:'||name||',薪水:'||sal);
end;
1.1.2 引用数据类型
declare
    --引用数据类型
    name emp.ename%Type;
begin
    select ename into name from emp where empno =7839;
	--输出到DBMS
	Dbms_Output.put_line('姓名:'||name);
end;

1.1.3 记录型变量
declare
    --记录型变量,相当于java的一个对象
    name emp%Rowtype;
begin
    select * into name from emp where empno = 7839;
	--不能直接输出name,因为他是一个对象了相当于,可以直接输出他的属性。
	Dbms_output.put_line(name.ename);
end;
    

1.2 流程控制

1.2.1 条件分支
declare
    sal number;
begin
    select count(1) into sal from emp where empno =7839;
   if sal >= 30 then 
       Dbms_output.put_line('薪资大于等于30');
       elsif sal >= 20 then
       	Dbms_output.put_line('薪资大于等于20,小于等于30');
       else 
        Dbms_output.put_line('薪资小于20元');
        	end if;
end;
1.2.2 循环

在oracle中有三种循环方式:简单循环

declare
    num number := 1;
begin
    loop
    exit when num >= 10;
    dbms_output.put_line(num);
    num := num+1;
    end loop;
end;

for循环

declare
    begin
--查询语句有几条,默认就循环几条
for 变量名 in (select 语句) loop
    end loop;
--5开始倒着循环
 FOR v_counter2 IN REVERSE 1..5 LOOP
	DBMS_OUTPUT.PUT_LINE(v_counter2);
END LOOP; 
--1开始正着循环
FOR v_counter2 IN 1..5 LOOP
	DBMS_OUTPUT.PUT_LINE(v_counter2);
END LOOP; 
end;

while循环

1.3 游标

  • 什么是游标

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

  • 游标的使用方式

    声明 —> 打开 —> 读取 —> 关闭

  • 语法

    游标声明:

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

    游标的打开:

    open 游标名[(参数列表)];

    游标的取值:

    fetch 游标名 into 变量列表;

    游标的关闭:

    close 游标名;

  • 游标的属性

    游标的属性返回值类型说明
    %rowcount整型获得fetch语句返回的数据行数,遍历游标,获取当前游标的下标值
    %found布尔类型最近的fetch语句返回一行数据则为真,否则为假
    %notfound布尔类型最近的fetch语句返回一行数据则为假,否则为真
    %isopen布尔类型游标打开时为真,否则为假
1.3.1 无参游标
  • 使用游标查询emp表中所有员工的姓名和工资,并将其打印。
declare
  --声明游标
  cursor v_emp is select ename,sal from emp;
  --定义两个普通变量
  name emp.ename%Type;
  sal emp.sal%Type;
begin
  --打开游标
  open v_emp;
  --遍历游标
  loop
      	--判断前将数据放入到变量中,因为%notfound默认是假,遍历游标相当于java中的迭代器,放在判断之后,判断时还未取值,
      	--又因为%notfound默认是假,所以会比判断前多循环一次。
        fetch v_emp into name,sal;
	--当游标数据遍历完成,数据为空时为真
    exit when v_emp%notfound;
    	dbms_output.put_line('姓名:'||name||',薪水:'||sal||',数量:'||v_emp%rowcount);
    end loop;
   close v_emp;    
end;
1.3.2 有参游标
declare
  --声明带参数游标
  cursor v_emp(v_deptno emp.deptno%Type) is select ename,sal from emp where deptno =v_deptno;
  --定义两个普通变量
  name emp.ename%Type;
  sal emp.sal%Type;
begin
  --打开游标
  open v_emp(10);
  --遍历游标
  loop
      	--判断前将数据放入到变量中,因为%notfound默认是假
        fetch v_emp into name,sal;
	--当游标数据遍历完成,数据为空时为真
    exit when v_emp%notfound;
      dbms_output.put_line('姓名:'||name||',薪水:'||sal||',数量:'||v_emp%rowcount);
    end loop;
   close v_emp;    
end;

1.4 存储过程

  • 概念

    将一个个的PLSQL的业务处理过程存储起来可以反复调用,这些被存储起来的PLSQL程序称为存储过程

  • 语法

    create or replace procedure 存储过程名称(参数列表) as
        --声明变量
        
        begin
        
        end;
    
1.4.1 无参存储过程
create or replace procedure v_test as
    --声明变量
    
    begin
    dbms_output.put_line('hello world');
    end;
1.4.2 带输入参数的存储过程
--in 代表输入参数,相当于java方法入参,
create or replace procedure v_test(v_num in number) as
    --声明变量

    begin
    dbms_output.put_line('hello world'||v_num);
    end;
1.4.3 带输出参数的存储过程
-- out 代表输出参数
create or replace procedure v_test(v_num in number,v_deptno out emp.deptno%Type ) as
    --声明变量
    begin
      select deptno into v_deptno from emp where empno =v_num;
    end;

declare
 num emp.deptno%Type;
begin 
   v_test(7369,num);
   dbms_output.put_line(num);
end;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-Xshell-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值