关闭

Oracle存储过程

156人阅读 评论(0) 收藏 举报
--无参的存储过程
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;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13138次
    • 积分:383
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论