參數模式
更新時間 2025-02-14 10:25:04
最近更新時間: 2025-02-14 10:25:04
分享文章
本頁介紹天翼云TeleDB數據庫PL/pgsql函數的參數模式。
參數模式總共有三種,分別是IN(傳入參數,這個是默認方式)、OUT(返回值參數)、INOUT(傳入返回值參數),下面介紹這幾個參數模式的用法。
IN 模式
IN 模式指的是執行函數時需要輸入參數值,如下所示。
teledb=# CREATE OR REPLACE FUNCTION f1(IN a_xm text) RETURNS TEXT AS
teledb-# $$
teledb$# BEGIN
teledb$# RETURN a_xm;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT f1('teledb');
f1
---------
teledb
(1 row)
teledb=# CREATE OR REPLACE FUNCTION f1(a_xm text) RETURNS TEXT AS
$$
BEGIN
RETURN a_xm;
END;
$$
LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT * from f1('teledb');
f1
---------
teledb
(1 row)上面兩種方式定義的參數效果是一樣的。
OUT 模式
OUT 模式參數是指定了函數執行時返回的字段名及類型。
teledb=# CREATE OR REPLACE FUNCTION f1(OUT a_xm text) RETURNS TEXT AS
teledb-# $$
teledb$# BEGIN
teledb$# a_xm:= 'teledb';
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=#
teledb=# SELECT * from f1();
a_xm
---------
teledb
(1 row)采用OUT模式參數不能用 RETURN 返回,而是要對返回的OUT參數直接賦值。返回值類型與參數的數據類型必需一致。參數名就是返回的字段名。
INOUT 模式
INOUT模式是指參數即傳入,同時又指定了返回值的字段名和類型。
teledb=# CREATE OR REPLACE FUNCTION f1(INOUT a_xm text) RETURNS TEXT AS
teledb-# $$
teledb$# BEGIN
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT * from f1('teledb');
a_xm
---------
teledb
(1 row)值得注意的是,上面的函數跟下面的函數是相同的,即重新定義會覆蓋掉。
teledb=# CREATE OR REPLACE FUNCTION f1(IN a_xm text) RETURNS TEXT AS
$$
BEGIN
RETURN a_xm;
END;
$$
LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# SELECT * from f1('teledb');
f1
---------
teledb
(1 row)VARIADIC 模式
VARIADIC模式是參數個數可變模式,系統用一個數組對傳入的參數進行處理,VARIADIC參數必需是所有最后一個聲明,如下所示。
teledb=# CREATE OR REPLACE FUNCTION f1(VARIADIC a_int integer[]) RETURNS void AS
teledb-# $$
teledb$# BEGIN
teledb$# RAISE NOTICE 'a_int = %',a_int;
teledb$# RAISE NOTICE 'a_int[1] = %',a_int[1];
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# select f1(1);
NOTICE: a_int = {1}
NOTICE: a_int[1] = 1
f1
----
(1 row)
teledb=# select f1(1,2);
NOTICE: a_int = {1,2}
NOTICE: a_int[1] = 1
f1
----
(1 row)
teledb=# CREATE OR REPLACE FUNCTION f1(a_xm TEXT,VARIADIC a_int integer[]) RETURNS void AS
teledb-# $$
teledb$# BEGIN
teledb$# RAISE NOTICE 'a_int = %',a_int;
teledb$# RAISE NOTICE 'a_int[1] = %',a_int[1];
teledb$# RAISE NOTICE 'a_xm = %',a_xm;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=#
teledb=# select f1('teledb',1,2);
NOTICE: a_int = {1,2}
NOTICE: a_int[1] = 1
NOTICE: a_xm = teledb
f1
----
(1 row)