函数重载Oracle和PG的异同是什么
本篇内容主要讲解“函数重载Oracle和PG的异同是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“函数重载Oracle和PG的异同是什么”吧!
Oracle
Oracle不支持函数重载,一个函数名只能对应一个函数.
SQL>dropfunctionfunc_1;函数已删除。SQL>CREATEfunctionfunc_1(p_inNUMBER,p_out1outnumber,p_out2outvarchar2)2returndate3as4begin5returnsysdate;6end;7/函数已创建。SQL>--errorSQL>CREATEfunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2)2returndate3as4begin5returnsysdate;6end;7/CREATEfunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2)*第1行出现错误:ORA-00955:名称已由现有对象使用SQL>SQL>--errorSQL>CREATEfunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2,p_out2outnumber)2returndate3as4begin5returnsysdate;6end;7/CREATEfunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2,p_out2outnumber)*第1行出现错误:ORA-00955:名称已由现有对象使用SQL>
虽然参数类型不同或者参数个数不同,但Oracle可直接替换函数
SQL>CREATEorreplacefunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2)2returndate3as4begin5returnsysdate;6end;7/函数已创建。SQL>CREATEorreplacefunctionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2,p_out2outnumber)2returndate3as4begin5returnsysdate;6end;7/函数已创建。SQL>selectobject_namefromdba_objectswhereobject_name='FUNC_1';OBJECT_NAME--------------------------------------------------------------------------------FUNC_1SQL>
可通过Package实现函数重载.
SQL>--packageSQL>createorreplacepackagepk_overload2as3functionfunc_1(p_in1NUMBER,p_out1outnumber,p_out2outvarchar2)returndate;4functionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2)returndate;5functionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2,p_out2outnumber)returndate;6end;7/程序包已创建。SQL>SQL>createorreplacepackagebodypk_overload2as3functionfunc_1(p_in1NUMBER,p_out1outnumber,p_out2outvarchar2)returndate4is5begin6null;7end;89functionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2)returndate10is11begin12null;13end;1415functionfunc_1(p_in1NUMBER,p_out1outnumber,p_in2invarchar2,p_out2outnumber)returndate16is17begin18null;19end;2021end;22/程序包体已创建。SQL>
PostgreSQL
PG在函数级别上就可以实现函数重载
[local:/data/run/pg12]:5120pg12@testdb=#--overload[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_overload(p_inint,p_out1outint,p_out2outtext)pg12@testdb-#returnsrecordpg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#beginpg12@testdb$#raisenotice'funcis:in,out,out';pg12@testdb$#return;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';CREATEFUNCTION[local:/data/run/pg12]:5120pg12@testdb=#[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_overload(p_in1int,p_out1outint,p_in2intext)pg12@testdb-#returnsintpg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#beginpg12@testdb$#raisenotice'funcis:in,out,in';pg12@testdb$#return;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';CREATEFUNCTION[local:/data/run/pg12]:5120pg12@testdb=#[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_overload(p_in1int,p_out1outint,p_out2outtext,pi_in2invarchar)pg12@testdb-#returnsrecordpg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#beginpg12@testdb$#raisenotice'funcis:in,out,out,in';pg12@testdb$#return;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';CREATEFUNCTION[local:/data/run/pg12]:5120pg12@testdb=#[local:/data/run/pg12]:5120pg12@testdb=#[local:/data/run/pg12]:5120pg12@testdb=#--'1'-->UNKNOW默认匹配的是text[local:/data/run/pg12]:5120pg12@testdb=#selectfunc_overload(1,'1');NOTICE:funcis:in,out,infunc_overload---------------(1row)[local:/data/run/pg12]:5120pg12@testdb=#selectfunc_overload(1,'1'::varchar);NOTICE:funcis:in,out,out,infunc_overload---------------(,)(1row)[local:/data/run/pg12]:5120pg12@testdb=#
PG会忽略输出参数,判断一个函数是否是同一个函数,仅判断输入参数;2.如存在OUT参数,PG函数无法返回结果,只能通过OUT参数返回
到此,相信大家对“函数重载Oracle和PG的异同是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。