應用程序語法介紹
更新時間(jian) 2025-02-14 10:24:38
最近更新時間: 2025-02-14 10:24:38
分享文章
您可以通過(guo)本頁了解天翼云(yun)TeleDB數(shu)據庫的建(jian)立函數(shu)語法(fa)、[OR REPLACE] 更(geng)新(xin)函數(shu)介(jie)紹、[模式名.]函數(shu)名介(jie)紹。
建立函數語法
CREATE [OR REPLACE] FUNCTION [模式名.]函數名 ([參數模式 [參數名] 數據類型 [default 默認值] [,…]]) RETRUNS [SETOF] 數據類型 AS
[標簽]
[DECLARE
--變量定義]
BEGIN
--注釋
/*注釋*/
--語句執行
END;
[標簽]
LANGUAGE PLPGSQL;[OR REPLACE] 更新函數介紹
OR REPLACE 的作用(yong)為函數存(cun)在時則(ze)替換,建(jian)立(li) PL/pgsql 函數時如果不帶(dai) OR REPLACE 關(guan)鍵字, 則(ze)遇到函數已經存(cun)在,系統會報(bao)錯(cuo),如下(xia)所示:
teledb=# select prosrc from pg_proc where proname='f';
prosrc
--------------------------------
+
BEGIN +
RAISE NOTICE 'Hello ,teledb';+
END; +
(1 row)
teledb=# CREATE FUNCTION f() RETURNS VOID AS
$$
BEGIN
RAISE NOTICE 'Hello ,teledb';
END;
$$
LANGUAGE PLPGSQL;
ERROR: function "f" already exists with same argument types
teledb=# CREATE OR REPLACE FUNCTION f() RETURNS VOID AS
$$
BEGIN
RAISE NOTICE 'Hello ,teledb';
END;
$$
LANGUAGE PLPGSQL;
CREATE FUNCTION
teledb=# select prosrc from pg_proc where proname='f';
prosrc
--------------------------------
+
BEGIN +
RAISE NOTICE 'Hello ,teledb';+
END; +
(1 row)
teledb=# select f();
NOTICE: Hello ,teledb
f
---
(1 row)[模式名.]函數名介紹
建立函數名稱,模(mo)式(shi)名可(ke)以指定,也可(ke)以不指定,不指存則(ze)存放在當(dang)前模(mo)式(shi)下(xia),如(ru)(ru)上面例子就沒有指定模(mo)式(shi)名,則(ze)就存放在當(dang)前模(mo)式(shi)下(xia),如(ru)(ru)下(xia)所示:
teledb=# select * from pg_namespace;
nspname | nspowner | nspacl
--------------------+----------+----------------------------------
pg_toast | 10 |
pg_oracle | 10 |
squeeze | 10 |
pg_temp_1 | 10 |
pg_toast_temp_1 | 10 |
pg_catalog | 10 | {teledb=UC/teledb,=U/teledb}
public | 10 | {teledb=UC/teledb,=UC/teledb}
information_schema | 10 | {teledb=UC/teledb,=U/teledb}
(8 rows)
teledb=# show search_path;
search_path
-----------------
"$user", public
(1 row)
teledb=# select pg_namespace.nspname,pg_proc.prosrc from pg_proc,pg_namespace where
teledb-# pg_proc.pronamespace=pg_namespace.oid and pg_proc.proname='f';
nspname | prosrc
---------+--------------------------------
public | +
| BEGIN +
| RAISE NOTICE 'Hello ,teledb';+
| END; +
|
(1 row)因為(wei)$user模式(shi)不(bu)存在,所以存在public模式(shi)下。