创建存储过程

-- 存储过程语法结构


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,10));
return v_num;
end;


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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值