首页 > 数据库技术 > 详细

oracle--存储过程--bai

时间:2017-01-06 23:55:24      阅读:397      评论:0      收藏:0      [点我收藏+]
--1 无入参最简单的存储过程

create or replace procedure hello_proc
 as
   v_name varchar2(20);
   v_age number;
 begin
   v_name:=‘bai‘;
   v_age:=18;

   dbms_output.put_line(‘你好‘||v_name||‘,你今年‘||v_age);
 end;


--在plsql中调用
begin
hello_proc;
end;

/* 在command窗下运行
set serverout on;
exec system.hello_proc;
*/

--练习1
create or replace procedure show_sum_proc
as
 v_i number:=‘1‘;
 v_sum number:=‘0‘;
begin
  loop
    v_sum:=v_sum+v_i;
    v_i:=v_i+1;  
    exit when v_i=201;  
  end loop;
   dbms_output.put_line(v_sum);
end;



--2 有入参的存储过程
create or replace procedure show_add_result
(
  i number default 10,   --默认值
  j number default 20
)
as
 v_result number;
begin
 v_result :=i+j;
 dbms_output.put_line(i||‘+‘||j||‘=‘||v_result);
end;


begin
  show_add_result(‘2‘);
end;

select * from scott.emp;
--经典例子
  显示指定工号的员工姓名和工资,如果没有,则输出该员工不存在
  
create or replace procedure show_emp_by_eno_proc
(
  v_eno scott.emp.empno%type:=‘7369‘
)
as
v_ename varchar(20);
v_sal number;
begin
  select ename,sal into v_ename,v_sal from scott.emp where empno=v_eno;

  dbms_output.put_line(v_eno||‘对应的员工名‘||v_ename||‘,工资‘||v_sal);
 exception
  when no_data_found then
  dbms_output.put_line(‘找不到‘||v_eno||‘对应的员工‘);
end;

create or replace procedure show_emp_by_eno_proc
as
begin
   dbms_output.put_line(‘测试重载‘);
end;

begin
   show_emp_by_eno_proc();
end;

--根据姓名查找员工
create or replace procedure show_emp_by_ename_proc
(
  v_ename varchar2
)
as
v_sal number;
begin
  select sal into v_sal from scott.emp where ename=v_ename;
  dbms_output.put_line(v_ename||‘对应的员工工资‘||v_sal);
 exception
  when no_data_found then
  dbms_output.put_line(‘找不到‘||v_ename||‘对应的员工‘);
  when too_many_rows then
  dbms_output.put_line(v_ename||‘对应的员工超过1个‘);
  when others then
    dbms_output.put_line(‘查找过程出现异常!‘);
end;

---
create or replace procedure show_dname_by_eno_depno
(
  v_depno scott.dept.deptno%type
)
as
v_dname varchar(20);
begin
  select dname into v_dname from scott.dept where deptno = v_depno;

  dbms_output.put_line(v_depno||‘对应的部门名‘||v_dname);
 exception
  when no_data_found then
  dbms_output.put_line(‘找不到‘||v_depno||‘对应的部门‘);
end;


--3 有入参,有出参的存储过程
输入i,j,用result出参获得相加的结果
create or replace procedure get_add_result_proc(
  i number,
  j number,
  result out number   --指定result为出参
)
as
begin
  result:=i+j;
end;


--使用plsql调用存储过程
declare
 result number;
begin  
   get_add_result_proc(‘1‘,‘2‘,result);   
   dbms_output.put_line(result);
end;

--创建存储过程,获得当前的日期和星期几
create or replace procedure get_date_and_day
(
   v_date out varchar2 ,
   v_day out varchar2 
)
as
begin
  select to_char(sysdate,‘dd‘),to_char(sysdate,‘day‘)  into v_date,v_day from dual;
end;

  

oracle--存储过程--bai

原文:http://www.cnblogs.com/ipetergo/p/6257558.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!