二十、Oracle学习笔记:编写存储过程
发布日期:2021-07-26 07:20:43 浏览次数:3 分类:技术文章

本文共 2438 字,大约阅读时间需要 8 分钟。

一、编写存储过程

1.复用匿名代码块,我们需要使用存储过程,函数,触发器等,存储过程就是封装了一个匿名代码块,可以通过参数进行输入,输出值。
   我们可以通过调用有名称的存储过程来复用代码块。
2.格式:

create [or replace] procedure 名称[(参数1 类型,参数2 类型 , ...)]  is|as     --变量声明区间  begin     --业务逻辑区间  end;  /

3.存储过程的调用

   (1)直接调用
     call 存储过程名(有参传参);
   (2)plsql调用
     begin
          存储过程名(有参传参);
     end;

--练习:使用存储过程输出显示helloword  create or replace procedure pro_d    is  begin    dbms_output.put_line('Helloworld');  end;  /  begin    pro_d();  end;  /
--练习:定义一个存储过程输出参数内容  create or replace procedure pro_out(idc number)  is     s number(4):=5;  begin    s:=s+idc;    dbms_output.put_line(s);  end;  /  begin        pro_out(5);  end;  /--练习,使用存储过程,获取某一员工的编号对应的姓名和职位  create or replace procedure pro_equ(eno number)  is    ena emp.ename%type;    ejob emp.job%type;  begin    select ename,job into ena,ejob from emp where empno=eno;    dbms_output.put_line(ena||'----'||ejob);  end;  /  begin    pro_equ(7369);  end;  /--练习,传入一个部门编号,查询部门的总工资  create or replace procedure pro_ssal(dno number)  is     s emp.sal%type;   begin    select sum(sal) into s from emp where deptno=dno;    dbms_output.put_line(s);  end;  /  begin    pro_ssal(10);  end;  /    

4.存储过程可以使用参数返回数据,特点:此时参数需要一些属性(in |out |in out)。
     in表示参数只能传入 不能输出(默认状态下属性为in)
     out表示参数只能用于输出
     in out 表示参数可以传入传出
     格式 :参数名 [in|out|in out] 类型

--练习 :传入两个参数,计算两个数的和与差  create or replace procedure pro_sum(a in number,b in number,s out number)  is  begin    s:=a+b;  end;  /   declare    total number(8);    begin     pro_sum(4,5,total);     dbms_output.put_line(total);  end;  / --练习:创建一个存储过程,完成临时表的信息存入dept表中,--      然后删除临时表数据  drop table dept_bak;  create table dept_bak(    deptno number(4),    dname varchar2(20),    loc varchar2(50)  );         insert into dept_bak values(11,'a','b');  insert into dept_bak values(12,'c','d');  insert into dept_bak values(13,'e','f');  commit;  select * from dept_bak;--编写存储过程--使用行变量接收临时表的数据,同时完成对表的数据插入  create or replace procedure pro_copy  is    cursor c is select * from dept_bak;  begin    for rowbak in c loop      insert into dept values(rowbak.deptno,rowbak.dname,rowbak.loc);    end loop;    delete from dept_bak;    commit;  end;  /  begin    pro_copy();  end;  /    --练习:返回a和b的和与差  create or replace procedure pro_com(a in number,b in number,s out number,c out number)  is  begin    s:=a+b;    c:=a-b;  end;  /  set serveroutput on;  declare    s1 number(8);    s2 number(8);   begin    pro_com(8,6,s1,s2);    dbms_output.put_line(s1);    dbms_output.put_line(s2);  end;  /

 

转载地址:https://blog.csdn.net/qq_38741971/article/details/81429346 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:二十一、Oracle学习笔记:编写函数和触发器
下一篇:十九、Oracle学习笔记:行变量

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 09时03分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章