Chinaunix首页 | 论坛 | 博客
  • 博客访问: 944737
  • 博文数量: 264
  • 博客积分: 10107
  • 博客等级: 上将
  • 技术积分: 2455
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 16:34
文章分类

全部博文(264)

文章存档

2012年(1)

2011年(11)

2010年(128)

2009年(82)

2008年(42)

我的朋友

分类: Oracle

2009-07-21 09:26:21

存储过程
 在 ORACLE SERVER上建立存储过程,可以被多个应用程序调用,可以向存储过程传递参数,也可以向存储过程传回参数。
创建存储过程语法:
Sql代码 复制代码
  1. CREATE [OR REPLACEPROCEDURE Procedure_name   
  2. [ (argment [ { IN | OUT | IN OUT } ] Type,   
  3.    argment [ { IN | OUT | IN OUT } ] Type ]   
  4. IS | AS }   
  5.     <类型.变量的说明>    
  6. BEGIN  
  7.     <执行部分>   
  8. EXCEPTION   
  9.     <可选的异常错误处理程序>   
  10. END;  
  例子:
Java代码 复制代码
  1. create or replace procedure delEmp(   
  2.        v_empno emp.empno%TYPE   
  3. )   
  4. is   
  5.        no_result exception;   
  6. begin   
  7.      delete from emp where empno = v_empno;   
  8.      if sql%notfound then   
  9.         raise no_result;   
  10.      end if;   
  11.      dbms_output.put_line('empno ' || v_empno || 'has been deleted!');   
  12. exception   
  13.     when no_result then   
  14.          dbms_output.put_line('empno ' || v_empno || ' not found!');   
  15.     when others then   
  16.          dbms_output.put_line(sqlcode || sqlerrm);   
  17. end;  
 调用存储过程:
 方法一:写一匿名块
Java代码 复制代码
  1. begin   
  2.      delemp(7369);   
  3. end;  
 方法二:在Toad Sql Editor中执行如下代码:
Java代码 复制代码
  1. class=java name="code">exec delEmp(1234);   
  2.    
 方法三:在Sql Plus中调用过程:
 首先设置让服务器显示信息:
Sql代码 复制代码
  1. set serveroutput on;  
 然后调用存储过程:
Java代码 复制代码
  1. exec delEmp(1234);  
 可以使用DROP语句删除过程:DROP PROCEDURE proceduer_name;
 可以使用DROP语句删除函数:DROP FUNCTION function_name;
练习题目:构造过程getEmp(),输入参数:职员编号,在控制台上输出职员的姓名,薪水,职位,部门编号,注:加入异常处理。
Sql代码 复制代码
  1. create or replace procedure getEmp(   
  2.        v_empno emp.empno%TYPE,   
  3.        v_ename out emp.ename%TYPE,   
  4.        v_sal out emp.sal%TYPE,   
  5.        v_job out emp.job%TYPE,   
  6.        v_deptno out emp.deptno%TYPE   
  7. )   
  8. is  
  9. begin  
  10.      select ename, sal, job, deptno into v_ename, v_sal, v_job, v_deptno from emp where empno = v_empno;   
  11. exception   
  12.          when no_data_found then  
  13.               dbms_output.put_line('你需要的数据不存在!');   
  14.         when others then  
  15.              dbms_output.put_line(sqlcode || sqlerrm);   
  16. end;  
 调用存储过程:
Sql代码 复制代码
  1. declare  
  2.        v_ename emp.ename%TYPE;   
  3.        v_sal emp.sal%TYPE;   
  4.        v_job emp.job%TYPE;   
  5.        v_deptno emp.deptno%TYPE;   
  6. begin  
  7.      getEmp(7499,v_ename,v_sal,v_job,v_deptno);   
  8.      dbms_output.put_line('人员姓名:'||v_ename||',工资:'|| v_sal || ',职位:'|| v_job || ',部门编号:'||v_deptno);   
  9. end;  
 
阅读(1538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~