金仓数据库KingbaseES之存储过程的RETURN语句
概述
RETURN语句一共有三个命令可以用来从函数中返回数据:
- RETURN
- RETURN NEXT
- RETURN QUERY
RETURN命令
语法:
RETURN
RETURN expression;
如果没有使用表达式 RETURN命令用于告诉这个函数已经完成执行了。
如果返回标量类型,那么可以使用任何表达式.要返回一个复合(行)数值,你必须写一个记录或者行变量的expression。
示例1: 带有表达式return
CREATE OR REPLACE FUNCTION getCompFoo1(in_col1 int, in_col2 TEXT)RETURNS compfooAS $$DECLAREcomp compfoo;BEGINcomp.col1 := in_col1 + 1;comp.col2 := in_col2 || '_result';RETURN comp;END;$$ LANGUAGE PLPGSQL;//compfoo 为自定义类型:CREATE TYPE compfoo AS (f1 int, f2 text);
如果声明函数带输出参数,那么就只需要写无表达式的RETURN。那么输出参数变量的当前值将被返回。
CREATE OR REPLACE FUNCTION getCompFoo2(in_col1 IN int,in_col2 IN TEXT,out_col1 OUT int, out_col2 OUT TEXT)AS $$BEGINout_col1 := in_col1 + 1;out_col2 := in_col2 || '_result';END;$$ LANGUAGE PLPGSQL;
示例2:不带有表达式return
如果声明函数返回void,那么一个RETURN语句可以用于提前退出函数; 但是不要在RETURN后面写一个表达式。
CREATE OR REPLACE FUNCTION getreturn(in_col1 int)RETURNS voidAS $$BEGINif in_col1 > 0 thenRAISE NOTICE 'there is %',in_col1;elsereturn;end if;END;$$ LANGUAGE PLPGSQL;
RETURN NEXT 命令
语法:
RETURN NEXT expression;
可以用于标量和复合数据类型;对于复合类型,将返回一个完整的结果"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$$DECLAREr foo%rowtype;BEGINFOR r IN SELECT * FROM foo WHERE fooid > 0LOOP-- can do some processing hereRETURN NEXT r; -- return current row of SELECTEND LOOP;RETURN;END$$ LANGUAGE PLPGSQL;
RETURN QUERY 命令
语法:
RETURN QUERY query;
RETURN QUERY EXECUTE command-string [ USING expression [, ... ] ];
示例1:将一条查询的结果追加到一个函数的结果集中。
CREATE OR REPLACE FUNCTION getAllFoo2() RETURNS SETOF foo AS$$DECLAREr foo%rowtype;BEGINRETURN QUERY SELECT * FROM foo WHERE fooid > 0;END$$ LANGUAGE PLPGSQL;
示例2:执行动态SQL。
CREATE OR REPLACE FUNCTION getAllFoo3(filter numeric) RETURNS SETOF foo AS$$BEGINRETURN QUERY EXECUTE 'SELECT * FROM foo WHERE fooid > $1'USING filter;END$$ LANGUAGE PLPGSQL;
金仓数据库KingbaseES之存储过程的RETURN语句相关推荐
- 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数
关键字 pg_get_function_arg_default,regproc 问题描述 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数获取函数或 ...
- 金仓数据库KingbaseES表空间(tablespace)知多少
金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等.一旦表空间被创建,那么就可以在创建数据库对象时通 ...
- 金仓数据库KingbaseES序列的操作
关键字 kingbase,序列 问题描述 如何操作金仓数据库KingbaseES序列? 解决方案 1.创建一个新的序列数发生器. 创建一个称作serial的上升序列,从 101 开始: CREATE ...
- 金仓数据库KingbaseES行列转换
概述 行列转换是在数据分析中经常用到的一项功能,金仓数据库KingbaseES从V8R6C3B0071版本开始通过扩展插件(kdb_utils_function)支持pivot和unpivot功能.在 ...
- 金仓数据库KingbaseES函数的管理
关键字 kingbase,函数 问题描述 如何管理金仓数据库KingbaseES函数? 解决方案 a.创建一个函数 create or repalce function CREATE FUNCTION ...
- 金仓数据库KingbaseES模式的使用
关键字 Kingbase.模式 正文 金仓数据库KingbaseES模式使用注意事项: 多个用户使用同一个数据库而不会相互影响: 对数据库中的对象进行逻辑分组,更便于管理: 各个应用分别使用各自的 ...
- 解决金仓数据库KingbaseES创建serial列并将其设置为主键约束,同时copy两条及以上数据时报错的问题
关键字 人大金仓.金仓数据库.KingbaseES.KES.serial.copy.PRIMARY KEY 问题描述 使用KingbaseES V8R3数据库的客户端工具ksql执行copy - ...
- 金仓数据库KingbaseES ORACLE_FDW常见问题
1. OCIEnvCreate错误 错误信息:error:error connecting to Oracle: OCIEnvCreate failed to create environmen ...
- 如何在金仓数据库KingbaseES中指定IP登录
关键字 KingbaseES,指定IP 问题描述 如何在金仓数据库KingbaseES中指定IP登录? 解决方案 1. 修改data目录下sys_hba.conf文件 2. 进行IP修改,重启服务,在 ...
最新文章
- 设计模式六大原则(5):迪米特法则
- php log在哪里看,PHP Log时时查看小工具
- 041_CSS3文本效果
- OpenCV学习之Scalar数据类型
- [Linux] 进程间通信
- 互联网和大数据是什么意思_何为互联网大数据?为什么每个人在数据的面前,相当于一丝不挂?...
- Angular4.x+Ionic3 踩坑之路之打包时出现JAVASCRIPT HEAP OUT OF MEMORY的几种解决办法
- SAP License:获利分析的两种方式比较
- linux服务器启用光口,Ubuntu中启用ssh服务
- “#if 0/#if 1 ... #endif”的作用
- 腾讯信鸽海量移动推送服务是如何构建的
- 在Windows里面使用binwalk工具分离图片
- u盘坏了在计算机不显示,U盘在电脑上不能显示怎么办
- 数独基本规则_独数游戏,数独题目大全
- 分享一款免费实用的野外调查巡检、户外旅行、外业作业地图数据采集软件
- [4G5G专题-76]:流程 - 4G LTE PLMN选择、扫频、小区搜索、系统消息读取、小区选择过程
- maven中实现代码单元测试覆盖率统计
- 怎么把图片转换成BMP格式
- 3dsmax: Failed to load max file: C:/Users/cyl/AppData/Local/Thinkbox/Deadline/s
- linux usleep占用cpu,[RK_2014_0918]linux下,测试usleep函数对CPU占用率的影响