首页 > 代码库 > oracle--存储过程--bai

oracle--存储过程--bai

--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