金倉資料庫KingbaseES儲存過程 RETURN語句
1、RETURN
如果沒有使用表示式,RETURN 命令用於告訴這個函式已經完成執行了,如示例2.
如果返回標量型別,那麼可以使用任何表示式。
示例1: 帶有表示式return
CREATE OR REPLACE FUNCTION getCompFoo1(in_col1 int, in_col2 TEXT)RETURNS compfooAS $$DECLARE comp compfoo;BEGIN comp.f1 := in_col1 + 1; comp.f2 := in_col2 || '_result'; RETURN comp;END; $$ LANGUAGE PLPGSQL;
compfoo 為自定義型別:CREATE TYPE compfoo AS (f1 int, f2 text);
函式返回結果:
test=# select getCompFoo1(1,'a'); getcompfoo1 -------------- (2,a_result) (1 row)
如果宣告函式帶輸出引數,那麼就只需要寫無表示式的RETURN。那麼輸出引數變數的當前值將被返回。
CREATE OR REPLACE FUNCTION getCompFoo2 (in_col1 IN int,in_col2 IN TEXT, out_col1 OUT int, out_col2 OUT TEXT)AS $$BEGIN out_col1 := in_col1 + 1; out_col2 := in_col2 || '_result';END; $$ LANGUAGE PLPGSQL;
函式返回結果:
test=# select getCompFoo2(1,'a'); getcompfoo2 -------------- (2,a_result) (1 row)
示例2:不帶有表示式return
如果宣告函式返回void,那麼一個RETURN語句可以用於提前退出函式; 但是不要在RETURN後面寫一個表示式。
CREATE OR REPLACE FUNCTION getreturn(in_col1 int)RETURNS voidAS $$BEGIN if in_col1 > 0 then RAISE NOTICE 'there is %',in_col1; else return; end if;END; $$ LANGUAGE PLPGSQL;
函式返回結果:
test=# select getreturn(1);NOTICE: there is 1 getreturn ----------- (1 row) test=# select getreturn(0); getreturn ----------- (1 row)
2、RETURN NEXT
可以用於標量和複合資料型別;對於複合型別,將返回一個完整的結果"table"。
示例:
CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT);INSERT INTO foo VALUES (1, 2, 'three');INSERT INTO foo VALUES (4, 5, 'six'); CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS$$DECLARE r foo%rowtype;BEGIN FOR r IN SELECT * FROM foo WHERE fooid > 0 LOOP -- can do some processing here RETURN NEXT r; -- return current row of SELECT END LOOP; RETURN;END$$ LANGUAGE PLPGSQL;
返回結果:
test=# select getAllFoo(); getallfoo ------------- (1,2,three) (4,5,six) (2 rows)
3、RETURN QUERY
語法:
RETURN QUERY query; RETURN QUERY EXECUTE command-string [ USING expression [, ... ] ];
示例1:將一條查詢的結果追加到一個函式的結果集中。
CREATE OR REPLACE FUNCTION getAllFoo2() RETURNS SETOF foo AS$$DECLARE r foo%rowtype;BEGIN RETURN QUERY SELECT * FROM foo WHERE fooid > 0;END$$ LANGUAGE PLPGSQL;
返回結果:
test=# select getAllFoo2(); getallfoo2 ------------- (1,2,three) (4,5,six) (2 rows)
示例2:執行動態SQL。
CREATE OR REPLACE FUNCTION getAllFoo3(filter numeric) RETURNS SETOF foo AS$$BEGIN RETURN QUERY EXECUTE 'SELECT * FROM foo WHERE fooid > $1' USING filter;END$$ LANGUAGE PLPGSQL;
執行結果:
test=# select getAllFoo3(1); getallfoo3 ------------ (4,5,six) (1 row)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004805/viewspace-2942946/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 金倉資料庫KingbaseES PLSQL 支援語句級回滾資料庫SQL
- 資料庫儲存過程資料庫儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- EF中使用SQL語句或儲存過程SQL儲存過程
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- 資料庫基礎知識詳解四:儲存過程、檢視、遊標、SQL語句優化以及索引資料庫儲存過程SQL優化索引
- CYQ.Data 支援 KingbaseES人大金倉資料庫資料庫
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- JavaScript return 語句JavaScript
- 儲存過程_造使用者資料儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 恢復MySQL資料庫建立儲存過程是遇到錯誤MySql資料庫儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 利用dbms_profile定位儲存過程或者package裡低效率語句儲存過程Package
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- Mysql使用儲存過程快速新增百萬資料MySql儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- 淺談mysql資料庫技術,輕鬆玩轉儲存過程MySql資料庫儲存過程
- 解決金倉資料庫KingbaseES V8R3叢集故障報錯的問題資料庫
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程