5:存储函数

无参的存储过程

--存储过程
create or replace procedure pro_query
is
begin
    declare
    v_no dept.deptno%type := &no;
    v_count number(5,0);
    begin
      select count(emp.empno) into v_count
      from emp
      where emp.deptno = v_no; 
    dbms_output.put_line('员工数量为:'|| v_count);
    end;
end;

--调用存储过程
begin
    pro_query; --存储过程名
end;

有参存储过程,输出参至少赋值一次

--有参存储过程
create or replace procedure pro_query1
(v_deptno emp.deptno%type,
 v_count out number)
is     --参数不加长度
begin
  begin    
    select count(empno) into v_count from emp
    where deptno = v_deptno;
    end;
end;
--有参调用过程
declare
v_count number(3,0) := 0;
begin
  pro_query1(30,v_count);
  dbms_output.put_line(v_count);
end;

默认值传参-不推荐使用

--给某个人涨一定薪资,用默认值的方式
create or replace procedure pro_addsal
(
  eno number default 7788,
  adsal in number default 100
)
is
begin
  declare
    v_sal emp.sal%type;
    v_name emp.ename%type;
    begin
    select sal into v_sal
    from emp where emp.empno = eno;  
    select ename into v_name
    from emp where emp.empno = eno;
    
    update emp set sal = v_sal + adsal
    where emp.empno = eno;
    dbms_output.put_line('姓名是:'||v_name||'工资增长了'||adsal);
    commit;
    end;
end;

--调用
begin
  --pro_addsal;
  --当形参实参不对应时
  pro_addsal(adsal => 100,eno => 7788);
end;

 存储过程、函数,是存储在数据库端的,在数据库端执行的对象

(1)减少网络传输量,无需在程序和数据库端往返传输数据

(2)相对安全

(3)效率高,已经进行预编译,直接执行即可

缺点:都在数据库端执行,当并发访问时,服务器压力大,效率低

原文地址:https://www.cnblogs.com/miaomeng/p/8920187.html