无参的存储过程
--存储过程 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)效率高,已经进行预编译,直接执行即可
缺点:都在数据库端执行,当并发访问时,服务器压力大,效率低