Oracle与PostgreSQL的区别有哪些
这篇文章主要讲解了“Oracle与PostgreSQL的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle与PostgreSQL的区别有哪些”吧!
Oracle
SQL>CREATEORREPLACEfunctionfunc_out(pi_inNUMBER,pi_out1outnumber,pi_out2outvarchar2)2returndate3as4v_datedate;5begin6v_date:=sysdate;7pi_out1:=pi_in;8pi_out2:=pi_in;9returnv_date;10end;11/函数已创建。SQL>SQL>setserveroutputonSQL>declare2v_datedate;3v_out1number;4v_out2varchar2(200);5begin6v_date:=func_out(1,v_out1,v_out2);7dbms_output.put_line('v_date='||v_date||';v_out1='||v_out1||';v_out2='||v_out2);8end;9/v_date=14-2月-20;v_out1=1;v_out2=1PL/SQL过程已成功完成。SQL>
输出参数分别是number、varchar2,函数返回date类型。
PostgreSQL
[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_out(pi_inint,pi_out1outint,pi_out2outtext)pg12@testdb-#returnsdatepg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#v_datedate;pg12@testdb$#beginpg12@testdb$#v_date:=current_date();pg12@testdb$#pi_out1:=pi_in;pg12@testdb$#pi_out2:=to_char(pi_in);pg12@testdb$#returnv_id;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';ERROR:functionresulttypemustberecordbecauseofOUTparameters[local:/data/run/pg12]:5120pg12@testdb=#
提示结果类型必须为record
[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_out(pi_inint,pi_out1outint,pi_out2outtext)pg12@testdb-#returnsrecordpg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#v_datedate;pg12@testdb$#beginpg12@testdb$#v_date:=current_date;pg12@testdb$#pi_out1:=pi_in;pg12@testdb$#pi_out2:=to_char(pi_in);pg12@testdb$#returnnull;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';ERROR:RETURNcannothaveaparameterinfunctionwithOUTparametersLINE11:returnnull;^[local:/data/run/pg12]:5120pg12@testdb=#
改为record后,返回null值,提示如存在OUT参数不允许返回值。
[local:/data/run/pg12]:5120pg12@testdb=#CREATEORREPLACEfunctionfunc_out(pi_inint,pi_out1outint,pi_out2outtext)pg12@testdb-#returnsrecordpg12@testdb-#aspg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#v_datedate;pg12@testdb$#beginpg12@testdb$#v_date:=current_date;pg12@testdb$#pi_out1:=pi_in;pg12@testdb$#pi_out2:=pi_in;pg12@testdb$#return;pg12@testdb$#end;pg12@testdb$#$$LANGUAGE'plpgsql';CREATEFUNCTION[local:/data/run/pg12]:5120pg12@testdb=#
创建成功,尝试调用
[local:/data/run/pg12]:5120pg12@testdb=#dopg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#v_retrecord;pg12@testdb$#v_out1int;pg12@testdb$#v_out2text;pg12@testdb$#beginpg12@testdb$#v_ret:=func_out(1,v_out1,v_out2);pg12@testdb$#raisenotice'retis:%d',v_ret;pg12@testdb$#endpg12@testdb$#$$pg12@testdb-#;ERROR:functionfunc_out(integer,integer,text)doesnotexistLINE1:SELECTfunc_out(1,v_out1,v_out2)^HINT:Nofunctionmatchesthegivennameandargumenttypes.Youmightneedtoaddexplicittypecasts.QUERY:SELECTfunc_out(1,v_out1,v_out2)CONTEXT:PL/pgSQLfunctioninline_code_blockline7atassignment[local:/data/run/pg12]:5120pg12@testdb=#
提示没有相应的函数,原因是PG会忽略OUT参数,把out参数去掉重新调用
[local:/data/run/pg12]:5120pg12@testdb=#dopg12@testdb-#$$pg12@testdb$#declarepg12@testdb$#v_retrecord;pg12@testdb$#v_out1int;pg12@testdb$#v_out2text;pg12@testdb$#beginpg12@testdb$#v_ret:=func_out(1);pg12@testdb$#raisenotice'retis:%',v_ret;pg12@testdb$#endpg12@testdb$#$$;NOTICE:retis:(1,1)DO[local:/data/run/pg12]:5120pg12@testdb=#[local:/data/run/pg12]:5120pg12@testdb=#
返回的是record,第一个值为1,第二个值为1
1.PG会忽略输出参数,判断一个函数是否是同一个函数,仅判断输入参数;
2.如存在OUT参数,PG函数无法返回结果,只能通过OUT参数返回。
感谢各位的阅读,以上就是“Oracle与PostgreSQL的区别有哪些”的内容了,经过本文的学习后,相信大家对Oracle与PostgreSQL的区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。