中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle與PostgreSQL內置的編程語言有什么不同

發布時間:2021-11-08 11:55:51 來源:億速云 閱讀:173 作者:iii 欄目:關系型數據庫

本篇內容主要講解“Oracle與PostgreSQL內置的編程語言有什么不同”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Oracle與PostgreSQL內置的編程語言有什么不同”吧!

Oracle和PostgreSQL都提供了內置的編程語言(PL/SQL vs PL/pgSQL),在輸入輸出參數的聲明上有較大的不同,如輸入參數中存在inout/out參數,Oracle的函數可以有返回值,但PG不允許有返回值,只能通過參數返回。

Oracle
創建函數

TEST-orcl@DESKTOP-V430TU3>CREATE or replace FUNCTION sf_testparameter(p1 varchar2,p2 int,p3 varchar2,p4  in out int)
  2  RETURN varchar2
  3  is
  4  begin
  5    p4 := 1;
  6    return 'test';
  7  end;
  8  /
Function created.

執行

TEST-orcl@DESKTOP-V430TU3>select sf_testparameter(null,null,null,:p4) from dual;
select sf_testparameter(null,null,null,:p4) from dual
       *
ERROR at line 1:
ORA-06572: Function SF_TESTPARAMETER has out arguments

不能在SQL中執行,但可以在PL/SQL中執行

TEST-orcl@DESKTOP-V430TU3>set serveroutput on
TEST-orcl@DESKTOP-V430TU3>declare
  2    p4 number;
  3    ret varchar2(100);
  4  begin
  5    ret := sf_testparameter(null,null,null,p4);
  6    dbms_output.put_line('p4 = '||p4||',ret='||ret);
  7  end;
  8  /
p4 = 1,ret=test

PostgreSQL
創建函數,參數中存在inout類型的參數,返回值必須與該參數類型一樣,而且return不能返回實際值。

[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)
pg12@testdb-#   RETURNS text 
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return 'test';
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
ERROR:  function result type must be integer because of OUT parameters
[local:/data/run/pg12]:5120 pg12@testdb=# 
[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;
ERROR:  could not find a function named "sf_testparameter"
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)
pg12@testdb-#   RETURNS int 
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return 1;
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
ERROR:  RETURN cannot have a parameter in function with OUT parameters
LINE 5:   return 1;
                 ^
[local:/data/run/pg12]:5120 pg12@testdb=# 
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)
pg12@testdb-#   RETURNS int 
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return;
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
CREATE FUNCTION
[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null);
 sf_testparameter 
------------------
(1 row)
[local:/data/run/pg12]:5120 pg12@testdb=#

如參數中有多個out參數,則要求返回record類型

[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;
ION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text)
  RETURNS record
  AS $$
begin
  return;
end;
$$ LANGUAGE 'plpgsql';
\df sf_testparameter
select sf_testparameter(null,null,null,null,null);
select sf_testparameter(null,null,null,null);
DROP FUNCTION
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text)
pg12@testdb-#   RETURNS text 
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return 'test';
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=# 
[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;
ERROR:  could not find a function named "sf_testparameter"
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text)
pg12@testdb-#   RETURNS record
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return;
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
CREATE FUNCTION
[local:/data/run/pg12]:5120 pg12@testdb=# 
[local:/data/run/pg12]:5120 pg12@testdb=# \df sf_testparameter
List of functions
-[ RECORD 1 ]-------+------------------------------------------------------------
Schema              | public
Name                | sf_testparameter
Result data type    | record
Argument data types | p1 text, p2 integer, p3 text, INOUT p4 integer, OUT p5 text
Type                | func
[local:/data/run/pg12]:5120 pg12@testdb=# 
[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null,null);
ERROR:  function sf_testparameter(unknown, unknown, unknown, unknown, unknown) does not exist
LINE 1: select sf_testparameter(null,null,null,null,null);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null);
 sf_testparameter 
------------------
 (,)
(1 row)
[local:/data/run/pg12]:5120 pg12@testdb=#

不管有多少個out參數,都歸為return參數,在調用時不需要作為參數輸入,難怪PG要求返回record類型。

[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;
DROP FUNCTION
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text,out p6 text)
pg12@testdb-#   RETURNS record
pg12@testdb-#   AS $$
pg12@testdb$# begin
pg12@testdb$#   return;
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
CREATE FUNCTION
[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null);
 sf_testparameter 
------------------
 (,,)
(1 row)
[local:/data/run/pg12]:5120 pg12@testdb=# 
[local:/data/run/pg12]:5120 pg12@testdb=#

到此,相信大家對“Oracle與PostgreSQL內置的編程語言有什么不同”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳西县| 鄯善县| 沁阳市| 新竹县| 平乡县| 长岭县| 微博| 疏勒县| 岗巴县| 咸宁市| 苏尼特右旗| 临西县| 内乡县| 彭水| 广汉市| 都昌县| 赞皇县| 南部县| 天镇县| 肥东县| 澄江县| 五台县| 吴江市| 衡阳县| 广元市| 资阳市| 图木舒克市| 台安县| 肇东市| 顺义区| 若羌县| 嵩明县| 平昌县| 郯城县| 长春市| 同仁县| 凯里市| 诸城市| 城市| 南川市| 鄂伦春自治旗|