Oracle的存储过程

sqlplus / a

begin
dbms_output.put_line('hello world');
end;
/

--设置输出开关
set serveroutput on

--普通变量
declare
v_name varchar(20) := '张三'; --普通变量
v_sal number;
v_addr varchar(200);
begin
v_sal := 5000.00; --直接赋值

select '深圳' into v_addr from dual; --语句赋值

dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('薪水:'||v_sal);
dbms_output.put_line('地址:'||v_addr);

end;

create table emp(ename varchar(20),esal number);
insert into emp values('wanglei',25000);
--引用型变量
declare
v_name emp.ename%type; --引用型变量
v_sal emp.esal%type;   --引用型变量
begin

select ename,esal into v_name,v_sal from emp; --语句赋值

dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('薪水:'||v_sal);

end;

--记录型变量
declare
v_emp emp%rowtype; --记录型接受一行数据,不能接受多行;接受多行需要使用集合,用cursor游标接受集合

begin
select * into v_emp from emp where rownum = 1;
dbms_output.put_line(v_emp.ename||','||v_emp.esal);
end;

--流程控制
--条件分支
declare
v_count number;

begin
select count(1) into v_count from emp;
if v_count > 1 then 
dbms_output.put_line('有数据条数:'||v_count);
elsif v_count > 5 then
dbms_output.put_line('有数据条数>>'||v_count);
else
dbms_output.put_line('有数据条数>>>'||v_count);
end if;

end;

--循环
declare
v_num number := 10;
begin
loop
exit when v_num < 0 ;
dbms_output.put_line(v_num);
v_num := v_num -1;
end loop;
end;


INSERT INTO EMP VALUES('WANGHONGXIA',1000000);
--游标(像集合迭代器),声明、打开、使用(fetch游标中的数据)、关闭
declare
cursor c_emp is select * from emp;
v_name emp.ename%type;
v_sal emp.esal%type;
begin
open c_emp;
loop
fetch c_emp into v_name,v_sal;
exit when c_emp%NOTFOUND;
dbms_output.put_line(v_name||','||v_sal);
end loop;
close c_emp;
end;

--带参数的游标(在打开游标的时候传值)

declare
cursor c_emp(c_name emp.ename%type) is select * from emp where ename = c_name;
v_name emp.ename%type;
v_sal emp.esal%type;
begin
open c_emp('WANGHONGXIA');
loop
fetch c_emp into v_name,v_sal;
exit when c_emp%NOTFOUND;
dbms_output.put_line(v_name||','||v_sal);
end loop;
close c_emp;
end;

--存储过程
create or replace procedure p_hello as 
begin
dbms_output.put_line('hello world');
end;

call p_hello();
exec p_hello();
exec p_hello; --没有参数时,这样也可以

--输入参数
create or replace procedure p_querynameandsal(i_name in emp.ename%type) as
v_emp emp%rowtype ;--只能存储一行数据
begin
select * into v_emp from emp where ename = i_name;--结果只能是一行数据
dbms_output.put_line(v_emp.ename||','||v_emp.esal);
end;

exec p_querynameandsal('WANGHONGXIA');

--输出参数
create or replace procedure p_querysalbyname(i_name in emp.ename%type,o_sal out emp.esal%type) as
v_emp emp%rowtype ;--只能存储一行数据
begin
select * into v_emp from emp where ename = i_name;--结果只能是一行数据
o_sal := v_emp.esal;
end;

declare
v_sal emp.esal%type;
begin
p_querysalbyname('wanglei',v_sal);
dbms_output.put_line(v_sal);
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值