Oracle学习开发PLSQL子程序和包

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 10:51 点击:

可以用exec或者call调用存储过程
定义变量时要用var,如:var username varchar2(20);
在调用变量时必须在变量名的前面加上双引号,如:exec :username := 'user1';
在调用存储过程时也要在变量名的前面加上双引号,如exec compute(:n1,:n2);
可以使用show error输出当前错误
查看存储过程的源代码:
 
Sql代码
select text from user_source where name='COMPUTE'; 

创建带输入、输出参数的存储过程:
在创建存储过程时可以定义in(输入参数,默认),out(输出参数)和in out(输入输出参数)三种参数
 
Sql代码
create or replace procedure compute(num1 in out number,num2 in out number) is 
   n1 number(10,2); 
   n2 number(10,2); 
begin 
   n1 := num1/num2; 
   n2 := mod(num1,num2); 
   -- 给要返回的变量赋值 
   num1 := n1; 
   num2 := n2; 
end; 

开发函数:
在指定函数的参数类型时,不能指定其长度;Return子句用于指定函数返回值的数据类型
IS或AS用于开始一个PL/SQL块(替代了declare)
在函数头部必须有Return子句,在函数体内至少要包含一个Return子句
在创函数时可以指定in(输入参数,默认),out(输出参数)和in out(输入输出参数)三种参数
 
Sql代码
-- 创建带输入输出参数的函数 
create or replace function get_result(num1 number,num2 in out number) 
return number is 
   n_result number(6); 
   n_remainder number; 
begin 
   n_result := num1/num2; 
   n_remainder := mod(num1,num2); 
   num2 := n_remainder; 
   return n_result; 
end; 

开发包:
创建包规范,相当于Java中定义接口,在这里定义的变量、函数和子程序都是公有的
 
Sql代码
create or replace package emp_package is 
   -- 定义公共变量 
   n_temp number(10,2) := 888.888; 
   -- 定义添加员工的存储过程 
   procedure add_emp(empno number,name varchar2,job varchar2,manager varchar2,hiredate varchar2,salary number,commision varchar2,deptno number); 
   -- 定义解雇员工的存储过程 
   procedure fire_emp(n_empno number); 
   -- 定义获得指定员工编号的员工工资的函数 
   function get_salary(n_empno number) return number; 
end emp_package; 

-- 创建包体,相当于Java中的接口实现类 
create or replace package body emp_package is 
   -- 定义一个用来验证员工编号是否存在的私有函数 
   function validate_empno(n_empno number) return boolean is 
      n_temp employee.empno%type; 
   begin 
      select empno into n_temp from employee where empno = n_empno; 
      return true; 
   exception 
      when no_data_found then return false; 
      when others then return false;       
   end; 
   -- 实现添加员工的存储过程 
   procedure add_emp(empno number,name varchar2,job varchar2,manager varchar2,hiredate varchar2, 
                     salary number,commision varchar2,deptno number) is 
   begin  
      if validate_empno(empno) then 
         raise_application_error(-20001,'编号为' || empno || '的员工已经存在!'); 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Table函数使用简介
      • Oracle数据库Constraint约束的常用操作及异常处理
      • Bulk Collect性能分析(zz)
      • export/import的使用
      • OCP043第十五讲 Database Security
      • ORACLE10gr2数据导入MySQL方案
      • oracle 让sys用户可以使用isqlplus
      • 在oracle数据库下使用iSQL*Plus DBA访问数据库
      • Oracle行列转换小结
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1