oracle中的建设进程,函数,包
一、建设存储进程存储进程是在oracle中存取完成特定营业逻辑的代码块。存储进程是定名块,匿名块不存在数据库中,定名块会存储到数据库中,匿名块每次运行都必要提前编译,定名块一次存储,只会编译一次。定名块可以多次行使。 ? 建设存储进程的语法:create [or replace] procedure 存储进程的名称(参数名[in/out/inout] 参数范例,参数名...)] is/as? 变量声明部门 begin 营业逻辑处理赏罚部门 exception 非常处理赏罚部门 end; 留意:1、存储进程名称一样平常以pro_开头。2、存储进程可以没有参数,假如没有参数不消加()。3、进程的参数分三种,入参in出参out进出参inout假如不写,默认是in。通过界说多个出参进程可以返回多个参数。4、进程可能函数的参数界说范例的时辰,不能有精度。例子:行使plsql声明一个存储进程,传一个员工编号的参数,返回员工的姓名和根基人为。 1 我们可以行使匿名块挪用存储进程: 2 -- 建设存储进程 输入员工编号 返回员工姓名 根基人为 3 create or replace procedure pro_emp_test(v_empno number,v_ename 4 out varchar2,v_sal out number) 5 is 6 --变量声明部门 7 begin 8 --营业逻辑处理赏罚部门 9 select ename,sal into v_ename,v_sal from emp where empno=v_empno; 10 end;--匿名块中挪用存储进程 11 declare 12 -- 声明参数用来吸取出参 13 v_ename emp.ename%type; 14 v_sal emp.sal%type; 15 begin 16 --挪用存储进程 17 pro_emp_test(7369,v_ename,v_sal); 18 -- 挪用进程之后 v_ename 和v_sal就有值了 可以打印功效 19 dbms_output.put_line(‘员工姓名:‘||v_ename||‘员工根基人为:‘||v_sal); 20 end; 二、建设函数建设函数和进程很是相同语法: create [or replace] function 函数名[(参数名1[in/out/inout] 参数范例...)] return 返回值的范例 as/is 变量声明部门 begin 营业逻辑处理赏罚部门 return 变量/常量 exception 非常处理赏罚部门 end; 留意:同形参范例一样,返回值范例不能有精度例子:建设一个函数,返回0到10之间的一个随机整数 ? 1 挪用函数一样平常行使匿名块: 2 create or replace function fun_random return number 3 is 4 -- 声明随机数变量 5 v_num number(5); 6 begin 7 --获取0到10之间的一个随机数 8 v_num:=trunc(dbms_random.value(0,10)); 9 return v_num; 10 end; 11 --通过匿名块挪用函数 12 declare 13 -- 声明变量吸取函数的返回值 14 v_num number(5); 15 begin 16 -- 挪用函数 17 v_num:=fun_random(); 18 --打印功效 19 dbms_output.put_line(‘随机数:‘||v_num); 20 end; ? 三、建设包在开拓中,假如营业逻辑较量伟大,必要界说许多进程可能函数。有也许必要界说几十个进程可能函数,这些进程可能函数假如都放到一路,欠好打点,一样平常行使包来打点进程可能函数,一个包中可以界说多个函数可能进程。 ? 一个包包罗包和包体,必要同时界说包和包体,这种写法相同于java中的接口和接口的实现。包相等于接口,包体相等于接口的实现类。 ? 建设包的语法: create [or replace] package 包名 is -- 声明常量 -- 声明函数可能进程,可是不能有实现 end; ? 建设包体的语法: create [or replace ] package body 包名 is -- 包的实现 end; 例子:界说包,计较圆的面积 界说包: 1 -- 界说包 计较圆的面积 2 create or replace package pac_area is 3 -- 界说pi常量 4 v_pi constant number(5,2):=3.14; 5 --界说计较圆的面积的进程,打印圆的面procedure pro_area(v_r number); 6 --界说一个获取圆的面积的函数 7 function fun_area return number; 8 end; ? 建设包体: 1 -- 界说包体,用来实现包 2 create or replace package body pac_area is 3 --把面积参数界说成包体的成员变量,这样函数也可以行使这个变量 4 v_area number(5,2); 5 -- 实现进程 6 procedure pro_area(v_r number) is 7 begin 8 v_area:=v_pi*v_r*v_r; 9 dbms_output.put_line(‘圆的面积是:‘||v_area); 10 end; 11 --实现函数,留意,挪用该函数前,必然要先挪用进程 12 function fun_area return number ibegin 13 return v_area; 14 end; 15 end;挪用包中的进程可能函数,在函数可能进程前加上包名就可以了: 16 --行使匿名块挪用包中的进程和函数 17 declare 18 v_area number(5,2); 19 begin 20 -- 挪用打印圆的面积的进程 21 pac_area.pro_area(2); 22 -- 挪用获取圆的面积的函数 23 v_area :=pac_area.fun_area(); 24 dbms_output.put_line(‘函数计较的圆的面积是:‘||v_area); 25 end; ? 四、打点 进程、函数、包删除: drop procedure 进程名; drop function 函数名; drop package 包名; 查询oracle中界说的包,函数,进程从user_source 表查找。 select * from user_source where type=‘PACKAGE BODY‘ and name = ‘PAC_AREA‘; ? 五、口试题一、进程和函数什么时辰用 进程一样平常用于返回多个参数,函数一样平常用户返回一个参数。 二、在pl/sql中 包的浸染是什么 包的浸染 封装,利便打点进程和函数。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |