這篇文章主要講解了“Oracle與PostgreSQL的區(qū)別有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Oracle與PostgreSQL的區(qū)別有哪些”吧!
創(chuàng)新互聯(lián)建站專業(yè)提供成都溫江機(jī)房服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買成都溫江機(jī)房服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。Oracle
SQL> CREATE OR REPLACE function func_out(pi_in NUMBER,pi_out1 out number,pi_out2 out varchar2) 2 return date 3 as 4 v_date date; 5 begin 6 v_date := sysdate; 7 pi_out1 := pi_in; 8 pi_out2 := pi_in; 9 return v_date; 10 end; 11 / 函數(shù)已創(chuàng)建。 SQL> SQL> set serveroutput on SQL> declare 2 v_date date; 3 v_out1 number; 4 v_out2 varchar2(200); 5 begin 6 v_date := func_out(1,v_out1,v_out2); 7 dbms_output.put_line('v_date = '||v_date||';v_out1 = '||v_out1||';v_out2 = '||v_out2); 8 end; 9 / v_date = 14-2月 -20;v_out1 = 1;v_out2 = 1 PL/SQL 過程已成功完成。 SQL>
輸出參數(shù)分別是number、varchar2,函數(shù)返回date類型。
PostgreSQL
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns date pg12@testdb-# as pg12@testdb-# $$ pg12@testdb$# declare pg12@testdb$# v_date date; pg12@testdb$# begin pg12@testdb$# v_date := current_date(); pg12@testdb$# pi_out1 := pi_in; pg12@testdb$# pi_out2 := to_char(pi_in); pg12@testdb$# return v_id; pg12@testdb$# end; pg12@testdb$# $$ LANGUAGE 'plpgsql'; ERROR: function result type must be record because of OUT parameters [local:/data/run/pg12]:5120 pg12@testdb=#
提示結(jié)果類型必須為record
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns record pg12@testdb-# as pg12@testdb-# $$ pg12@testdb$# declare pg12@testdb$# v_date date; pg12@testdb$# begin pg12@testdb$# v_date := current_date; pg12@testdb$# pi_out1 := pi_in; pg12@testdb$# pi_out2 := to_char(pi_in); pg12@testdb$# return null; pg12@testdb$# end; pg12@testdb$# $$ LANGUAGE 'plpgsql'; ERROR: RETURN cannot have a parameter in function with OUT parameters LINE 11: return null; ^ [local:/data/run/pg12]:5120 pg12@testdb=#
改為record后,返回null值,提示如存在OUT參數(shù)不允許返回值。
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns record pg12@testdb-# as pg12@testdb-# $$ pg12@testdb$# declare pg12@testdb$# v_date date; pg12@testdb$# begin pg12@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'; CREATE FUNCTION [local:/data/run/pg12]:5120 pg12@testdb=#
創(chuàng)建成功,嘗試調(diào)用
[local:/data/run/pg12]:5120 pg12@testdb=# do pg12@testdb-# $$ pg12@testdb$# declare pg12@testdb$# v_ret record; pg12@testdb$# v_out1 int; pg12@testdb$# v_out2 text; pg12@testdb$# begin pg12@testdb$# v_ret := func_out(1,v_out1,v_out2); pg12@testdb$# raise notice 'ret is : %d',v_ret; pg12@testdb$# end pg12@testdb$# $$ pg12@testdb-# ; ERROR: function func_out(integer, integer, text) does not exist LINE 1: SELECT func_out(1,v_out1,v_out2) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. QUERY: SELECT func_out(1,v_out1,v_out2) CONTEXT: PL/pgSQL function inline_code_block line 7 at assignment [local:/data/run/pg12]:5120 pg12@testdb=#
提示沒有相應(yīng)的函數(shù),原因是PG會(huì)忽略O(shè)UT參數(shù),把out參數(shù)去掉重新調(diào)用
[local:/data/run/pg12]:5120 pg12@testdb=# do pg12@testdb-# $$ pg12@testdb$# declare pg12@testdb$# v_ret record; pg12@testdb$# v_out1 int; pg12@testdb$# v_out2 text; pg12@testdb$# begin pg12@testdb$# v_ret := func_out(1); pg12@testdb$# raise notice 'ret is : %',v_ret; pg12@testdb$# end pg12@testdb$# $$; NOTICE: ret is : (1,1) DO [local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=#
返回的是record,第一個(gè)值為1,第二個(gè)值為1
1.PG會(huì)忽略輸出參數(shù),判斷一個(gè)函數(shù)是否是同一個(gè)函數(shù),僅判斷輸入?yún)?shù);
2.如存在OUT參數(shù),PG函數(shù)無法返回結(jié)果,只能通過OUT參數(shù)返回。
感謝各位的閱讀,以上就是“Oracle與PostgreSQL的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Oracle與PostgreSQL的區(qū)別有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文標(biāo)題:Oracle與PostgreSQL的區(qū)別有哪些-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://jinyejixie.com/article34/dpegpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、Google、外貿(mào)建站、定制開發(fā)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)