金倉資料庫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儲存過程
- 刪除資料庫中所有儲存過程和函式的sql語句資料庫儲存過程函式SQL
- oracle 儲存過程以及plsql語句塊Oracle儲存過程SQL
- Oracle 儲存過程中的DDL語句Oracle儲存過程
- 資料庫設計:儲存過程資料庫儲存過程
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- EF中使用SQL語句或儲存過程SQL儲存過程
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- 資料庫許可權-儲存過程資料庫儲存過程
- 用儲存過程把表裡的資料導成insert語句儲存過程
- Sql Server系列:SQL語句查詢資料庫中表、檢視、儲存過程等組成SQLServer資料庫儲存過程
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- 儲存過程 與 SQL Server語句大比拼儲存過程SQLServer
- 在.NET中用儲存過程執行SQL語句儲存過程SQL
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- 淺談資料庫中的儲存過程資料庫儲存過程
- 資料庫設計:儲存過程主體資料庫儲存過程
- Mysql 資料庫水平分表 儲存過程MySql資料庫儲存過程
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程
- 通過SQL語句提取儲存過程中的內容SQL儲存過程
- 儲存過程語法儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 儲存過程if,for,while語句,陣列和遊標使用儲存過程While陣列
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- 儲存過程返回資料集儲存過程
- 當前資料倉儲建設過程
- 儲存過程基本語法儲存過程
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- asp.net分頁的SQL語句及儲存過程ASP.NETSQL儲存過程
- mySQL語法中的儲存過程及if語句的使用簡例MySql儲存過程
- 資料庫基礎知識詳解四:儲存過程、檢視、遊標、SQL語句優化以及索引資料庫儲存過程SQL優化索引