oracle 存储过程语法

-- 存储过程语法结构

create [or replace] procudure(存储过程关键字) pro_name(自定义存储过程名称)  
(argument1 datatype,.....)
is[as]
声明
begin
...
exception
...
end;


select * from emp2;
-- 创建存储过程
create or replace procedure pro_emp2
is
begin
update emp2 set sal=sal+300;
dbms_output.put_line('更新成功!');
end;

--存储过程调用 1.call 存储过程名称() 2. exec 存储过程
--执行无参存储过程
call pro_emp2(); //sql window,command window 都可以执行
exec pro_emp2; //执行应用,在command window下执行

select * from emp2;

-- 创建带有输入(in)参数的存储过程
create or replace procedure pro_select
(v_empno in emp.empno%type)
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=v_empno;
dbms_output.put_line('员工薪资:'||v_sal);
end;

--执行有参的存储过程

call pro_emp2(7369); //sql window,command window 都可以执行
exec pro_emp2(7369); //执行应用,在command window下执行


--执行带有输出参数的存储过程 out
 
--根据员工的编号,输出员工的薪资
create or replace procedure pro_select
(v_empno in emp.empno%type,v_sal out emp.sal%type)
is
begin
select sal into v_sal from emp where empno=v_empno;
end;

--带有输入,输出参数的存储过程调用
匿名程序块执行
declare
v_sal emp.sal%type;
begin
pro_select(7369,v_sal);  --作为一个子程序执行
dbms_output.put_line('薪资:'||v_sal);
end;


-- 带有 in out 参数的存储过程

 create or replace procedure pro_in_out(param_num in out number)
    as
    begin
    select sal into param_num from emp where empno=param_num;
    end;
 --调用 in out 参数的存储过程
declare
param_num number:=7369;
begin
pro_in_out(param_num);
dbms_output.put_line('薪资:'||param_num);
end;

-- 参数传递方式 :1.位置传递 2.名称传递 3.组合传递

create or replace procedure pro_add_dept(v_deptno number,v_dname varchar2, v_loc varchar2)
as
begin
  insert into dept values(v_deptno,v_dname,v_loc);  
end;

1.位置传递 --调用时按参数的排列顺序
call pro_add_dept(2,'云和学习部','老君山');

2.名称传递  --按名称传递是指在调用时按照形参与实参的名称写出实参所对应的形参,将形参与实参关联起来进行传递
call pro_add_dept(v_loc=>'峨眉山',v_deptno=>3,v_dname=>'php培训部');

-- 函数的创建
create or replace function 函数名称(arg1 argType,arg2 arg2Type)
return dataType
is[as]
v_empno number;
begin
....
end;
--创建一个生成随机数的函数
create or replace function fun_random
return number
as
v_num number;
begin
v_num:=floor(dbms_random.value(1,100));
return v_num;
end;

函数的调用
declare
num number;
begin
num:=fun_random();
dbms_output.put_line('随机数:'||num);
end;


//创建输入输出过程

create or replace procedure proce_in(v_empno in emp3.empno%type,v_ename out emp3.ename%type)
 as  
   begin
     select  ename into v_ename from emp3 where empno = v_empno;
     dbms_output.put_line('名称是'||v_ename);
   end;

//输入输出过程调用
declare
  v_ename1 emp3.ename%type;
    v_empno1 emp3.empno%type;
 begin
   v_empno1:=&empno;
   proce_in(v_empno1,v_ename1);
   dbms_output.put_line('名称是'||v_ename1);
 end;
   
 //
 declare
  v_ename1 emp3.ename%type;
     
 begin
    
   proce_in(7369,v_ename=>v_ename1);
   dbms_output.put_line('名称是'||v_ename1);
 end;
 
 //创建函数---必须由返回值
 create or replace function fun_select(f_empno in emp3.empno%type,f_ename out emp3.ename%type)
 return emp3.ename%type
 as
   begin
     select ename into f_ename from emp3 where emp3.empno = f_empno;
     return f_ename;
   end;
  


   create or replace procedure pro_one(no in emp.empno%type)
           as
             name emp.ename%type;
          
          begin
            select ename into name from emp where emp.empno = no;
            dbms_output.put_line(name);
            end;
            
    create or replace procedure pro_emp2
     is
     begin
       update emp3 set sal= sal+200;
       end;
      





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值