Oracle存储过程

--无参的存储过程
create or replace procedure proc_one
as
     v_emp emp%rowtype;
begin
   select * into v_emp from emp where empno=7788;
   dbms_output.put_line(v_emp.ename||'  '||v_emp.sal);
end;
--在pl/sql developer command窗口查看过程编译错误
/
show errors;
/


--调用过程授权
grant execute on proc_one to px;     --授予执行权给px用户
grant execute on proc_one to public;--授予所有用户


--调用存储过程
SQL> set serveroutput on; --设置输出
SQL> exec scott.proc_one;
SQL> exec scott.proc_one();
        --PL/SQL代码块方式调用
begin
   proc_one();
end;


--Oracle存储过程参数形式有:
--in         默认形式  可以省略in   可以指定默认值
--out        输出参数 
--in out    输入输出参数    

--带输入参数的存储过程
create or replace procedure proc_two
(v_no in number:=7788) --参数不需要指定长度并可以指定默认值  可以省略in
as
   v_emp emp%rowtype;
begin
   select * into v_emp from emp where empno=v_no;
   dbms_output.put_line(v_emp.ename||'  '||v_emp.sal);
   exception 
     when no_data_found then
     dbms_output.put_line('没有找到数据');
end;


--带输出参数的存储过程
create or replace procedure proc_three
(v_no in dept.deptno%type:=10,
 out_deptname out dept.dname%type)
is
begin
  select dname into out_deptname from dept where deptno=v_no;
end;

--调用
declare
  v_dname dept.dname%type;
  v_dno dept.deptno%type;
begin
   v_dno:='&部门编号';
   --proc_three(v_dno,v_dname);
   proc_three(out_deptname=>v_dname,v_no=>v_dno);
--通过指定名称传递实参,这样可以不按位置顺序
   dbms_output.put_line('编号为'||v_dno||'的部门名称:'||v_dname);
end;


--带输入输出参数的存储过程
create or replace procedure proc_four
(v_a in out number,v_b in out number)
as
  v_temp number;
begin
   v_temp:=v_a;
   v_a:=v_b;
   v_b:=v_temp;
end;

--调用
declare
   n number:=100;
   m number:=200;
begin
   dbms_output.put_line('交换前--n:'||n||' m:'||m);
   proc_four(n,m);
   dbms_output.put_line('交换后--n:'||n||' m:'||m);
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值