关闭

oracle自定义函数

769人阅读 评论(1) 收藏 举报

一个简单的自定义函数:

create or replace function get_min_value(dbl_value1 in number, dbl_value2 in number)
return number
is
begin
       if dbl_value1<dbl_value2 then
         return dbl_value1;
       else
         return dbl_value2;
      end if;
end;

一、自定义函数的定义和调用入门
1 、一个最简单的自定义函数Fun_test1的定义。
create or replace function Fun_test1(p_1 number)--Fun_test1是函数名,有一个输入参

数p_1,是number型的。返回值也是number型的
  return number
IS
begin
if p_1>0 then
return 1;
elsif p_1=0 then
return 0;
else
return -1;
end if;
end;
--这个函数只是可以知道自定义函数的定义和格式。其实没什么用途。

2、Fun_test1自定义函数的调用的存储过程Pro_Fun_test1_1示例:
create or replace procedure Pro_Fun_test1_1(
p1_in in number,
p2_out out number
)
AS
begin
p2_out:=Fun_test1(p1_in);
end Pro_Fun_test1_1;
--一个输入参数,一个输出参数
3、Fun_test1自定义函数的调用的存储过程Pro_Fun_test1_2示例:
create or replace procedure Pro_Fun_test1_2(
p1_in in number,
p2_out out number
)
AS
t_1 number;
begin
select Fun_test1(p1_in)+100 INTO p2_out
from bill_org where org_ID=1;

end Pro_Fun_test1_2;
--自定义函数的调用方法和Oracle的其它内部函数是一样的。

二、包的定义和使用入门
包一般是过程和函数的集合,对过程和函数进行更好的封装,一般不针对字段。
包的构成包括包头和包体。
1、包头的定义:
包头仅仅只是对包中的方法进行说明,而没有实现
语法:
create or replace package myPackage_1
      is
       procedure syaHello(vname varchar2);--申明了该包中的一个过程
      end;
2、包体的定义:
包体是对包头中定义的过程、函数的具体实现。
create or replace package body myPackage_1
 is
 procedure syaHello(vname varchar2)--对包中定义的过程的实现
 is
 begin
 dbms_output.put_line('Hello '||vname);
 end;
 end;
要注意的是:
create or replace package后面的名称必须和create or replace package body后面的名称

一致,
如果将create or replace package body后面的名称改为,'MYPACKAGE'
否则将会出现诸如下面的错误:
必须说明标识符 'MYPACKAGE'
3、调用包用的自定义方法:
create or replace procedure Pro_test_package(
p1_in string
)
AS
begin
myPackage_1.syaHello(p1_in);
end Pro_test_package;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:142980次
    • 积分:1859
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:77篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论