高斯数据库创建函数的语法

CREATE FUNCTION
语法格式
•兼容PostgreSQL风格的创建自定义函数语法。
CREATE [ OR REPLACE ] FUNCTION function_name
( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, …] ] )
[ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, …] )]
LANGUAGE lang_name
[
{IMMUTABLE | STABLE | VOLATILE }
| {SHIPPABLE | NOT SHIPPABLE}
| WINDOW
| [ NOT ] LEAKPROOF
| {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
| {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}
| {fenced | not fenced}
| {PACKAGE}

    | COST execution_cost| ROWS result_rows| SET configuration_parameter { {TO | =} value | FROM CURRENT }}][...]
{AS 'definition'| AS 'obj_file', 'link_symbol'
}

•Oracle风格的创建自定义函数的语法。
CREATE [ OR REPLACE ] FUNCTION function_name
( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, …] ] )
RETURN rettype [ DETERMINISTIC ]
[
{IMMUTABLE | STABLE | VOLATILE }
| {SHIPPABLE | NOT SHIPPABLE}
| {PACKAGE}
| {FENCED | NOT FENCED}
| [ NOT ] LEAKPROOF
| {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
| {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER |
AUTHID DEFINER | AUTHID CURRENT_USER
}
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { {TO | =} value | FROM CURRENT

][...]{IS  | AS

} plsql_body
/

参数说明
•function_name
要创建的函数名字(可以用模式修饰)。
取值范围:字符串,要符合标识符的命名规范。

•argname
函数参数的名字。
取值范围:字符串,要符合标识符的命名规范。

•argmode
函数参数的模式。
取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。

VARIADIC用于声明数组类型的参数。

•argtype
函数参数的类型。

•expression
参数的默认表达式。

•rettype
函数返回值的数据类型。
如果存在OUT或IN OUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。
SETOF修饰词表示该函数将返回一个集合,而不是单独一项。

•DETERMINISTIC
为适配oracle SQL语法,未实现功能,不推荐使用。

•column_name
字段名称。

•column_type
字段类型。

•definition
一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名字、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。

•LANGUAGE lang_name
用以实现函数的语言的名字。可以是SQL,C,internal,或者是用户定义的过程语言名字。为了保证向下兼容,该名字可以用单引号(包围)。若采用单引号,则引号内必须为大写。

•WINDOW
表示该函数是窗口函数,通常只用于C语言编写的函数。替换函数定义时不能改变WINDOW属性。
自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。

•IMMUTABLE
表示该函数在给出同样的参数值时总是返回同样的结果。

•STABLE
表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。

•VOLATILE
表示该函数值可以在一次表扫描内改变,因此不会做任何优化。

•SHIPPABLE
NOT SHIPPABLE

表示该函数是否可以下推到DN上执行。
◾对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。
◾对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

•PACKAGE
表示该函数是否支持重载。PostgreSQL风格的函数本身就支持重载,此参数主要是针对Oracle风格的函数。◾不允许package函数和非package函数重载或者替换。
◾package函数不支持VARIADIC类型的参数。
◾不允许修改函数的package属性。

•LEAKPROOF
指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。

•CALLED ON NULL INPUT
表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。

•RETURNS NULL ON NULL INPUT
STRICT

STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。

RETURNS NULL ON NULL INPUT和STRICT的功能相同。

•EXTERNAL
目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。

•SECURITY INVOKER
AUTHID CURRENT_USER

表明该函数将带着调用它的用户的权限执行。该参数可以省略。

SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。

•SECURITY DEFINER
AUTHID DEFINER

声明该函数将以创建它的用户的权限执行。

AUTHID DEFINER和SECURITY DEFINER的功能相同。

•FENCED
NOT FENCED

该函数只对用户定义的C函数生效,声明函数是在保护模式还是非保护模式下执行。如果函数声明为NOT FENCED模式,则函数的执行在CN或者DN进程中进行。如果函数声明为FENCED模式,则函数在新fork的进程执行,这样函数的异常不会影响CN或者DN进程。

FENCED/NOT FENCED模式的选择:
◾正在开发或者调试的Function使用FENCED模式。开发测试完成,使用NOT FENCED模式执行,减少fork进程以及通信的开销。
◾复杂的操作系统操作,例:打开文件,信号处理,线程处理等操作,使用FENCED模式。否则可能影响GaussDB A数据库的执行。
◾默认值为FENCED。
◾C函数定义以及示例请参考:C语言函数

•COST execution_cost
用来估计函数的执行成本。
execution_cost以cpu_operator_cost为单位。
取值范围:正数

•ROWS result_rows
估计函数返回的行数。用于函数返回的是一个集合。
取值范围:正数,默认值是1000行。

•configuration_parameter◾value
把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。
取值范围:字符串
◾DEFAULT
◾OFF
◾RESET
指定默认值。

◾from current
取当前会话中的值设置为configuration_parameter的值。

•obj_file, link_symbol
适用于C语言函数,字符串obj_file指定了动态库的绝对路径;link_symbol指定了该函数的链接符号,也就是该函数在C代码中的函数名称。

•plsql_body
PL/SQL存储过程体。
当在函数体中创建用户时,日志中会记录密码的明文。因此不建议用户在函数体中创建用户。

示例:

创建函数:
CREATE FUNCTION ypg_output(tabname varchar)
return void
as
begindbms_output.put_line(tabname);
end;
/调用函数:
select ypg_output('xxx');
call ypg_output('xxx');--删除函数。
DROP FUNCTION ypg_output;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课程设计 大学生竞赛系统

课程设计 大学生竞赛系统 wx:help-assignment 学生用户: wx:help-assignment 首页:推荐一些竞赛,热门活动等; 广场:用户可以通过广场来发表动态,同时也可以查看别人发布的动态,并且可以 关注…

再升一位!中国平安位列Brand Finance中国品牌500强第八位

近日,国际知名品牌价值评级机构Brand Finance发布“2024年中国品牌价值500强”榜单,中国平安位列国内品牌第八位,较2023年上升一位。长期以来,平安致力于成为客户身边专业的金融顾问、家庭医生和养老管家,为客户提供省…

解决常见的Android问题

常见问题: 1、查杀: 查杀一般分为两个方向一种是内存不足的查杀,一种的是因为温度限频查杀,统称为内存查杀,两个问题的分析思路不同 1、内存不足查杀: 主要是因为当用户出现后台运行多个APP或者是相机等…

VO,PO,DTO

DTO(Data Transfer Object)数据传输对象 前后端之间的传输时使用 比如前端登录请求的请求参数有username,password,但后端pojo类user有username,password,birthday,gender时,可以创…

汇昌联信科技:拼多多可以做无货源吗?

在探讨电商平台的经营模式时,"无货源"这一概念经常被提及。它指的是卖家在不需要事先囤积大量商品的情况下,通过与供应商的合作,直接将订单信息传递给他们,由供应商完成发货的过程。针对“拼多多可以做无货源吗?”这一…

从零开始学习MySQL

# 第一步:下载MySQL安装包 访问MySQL官方网站的[下载页面](https://dev.mysql.com/downloads/mysql/),根据你的操作系统(Windows、macOS、Linux等)选择合适的MySQL Community Server版本进行下载。对于Windows用户,可以…

内网渗透之如何批量PTH获取主机权限?

—— 利用CrakMapExec工具进行全网段批量PTH CrackMapExec(CME)是一款后渗透利用工具,可帮助自动化大型活动目录(AD)网络安全评估任务。其缔造者byt3bl33d3r称,该工具的生存概念是,“利用AD内置功能/协议达成其功能&…

【练习2】

1.汽水瓶 ps:注意涉及多个输入&#xff0c;我就说怎么老不对&#xff0c;无语~ #include <cmath> #include <iostream> using namespace std;int main() {int n;int num,flag,kp,temp;while (cin>>n) {flag1;num0;temp0;kpn;while (flag1) {if(kp<2){if(…

2024-AIDD-人工智能药物设计设计思路-Artificial Intelligence for Drug Design

2024-AIDD-人工智能药物设计设计思路-Artificial Intelligence for Drug Design 在药物设计中&#xff0c;特别是针对特定靶点的药物设计&#xff08;AIDD&#xff0c;Artificial Intelligence for Drug Design&#xff09;&#xff0c;您可以遵循以下步骤&#xff1a; 靶点选…

什么股指期货滚IC的意思?

股指期货滚IC是一种投资策略&#xff0c;主要是指投资者在操作中证500股指期货&#xff08;IC&#xff09;时&#xff0c;利用股指期货相对于现货价格的贴水&#xff08;即期货价格低于现货价格&#xff09;来进行套利。 下面股指君将通过几个关键点来详细解释这个概念&#x…

算法学习笔记(博弈论中的SG函数)

定义 S G SG SG函数: 对于状态 x x x和它的所有 k k k个后继状态 y 1 , y 2 , . . . , y k y_1, y_2,...,y_k y1​,y2​,...,yk​&#xff1a; S G ( x ) m e x { S G ( y 1 ) , S G ( y 2 ) , . . . , S G ( y k ) } SG(x) mex\{SG(y_1), SG(y_2), ..., SG(y_k)\} SG(x)mex…

Android中gradle.properties 和 gradle-wrapper.properties 作用

我们更深入地了解这两个文件的作用和它们可以包含的一些常见配置。 gradle.properties gradle.properties文件是一个标准的Java属性文件&#xff0c;它允许你为Gradle构建配置全局属性。这些属性可以在项目的任何地方使用&#xff0c;包括项目的子项目。以下是一些常见的配置…

2024数维杯B题详细思路代码数学建模高质量保姆级

2024年第九届数维杯大学生数学建模挑战赛题目 B 题 生物质和煤共热解问题的研究 &#xff08;1&#xff09;基于附件一&#xff0c;请分析正己烷不溶物(INS)对热解产率&#xff08;主要 考虑焦油产率、水产率、焦渣产率&#xff09;是否产生显著影响&#xff1f;并利用图像 加…

工业机器人应用实践之玻璃涂胶(篇二)

工业机器人 接上篇文章&#xff0c;浅谈一下实践应用&#xff0c;具体以玻璃涂胶为例&#xff1a; 了解工业机器人在玻璃涂胶领域的应用认识工具坐标系的标定方法掌握计时指令的应用掌握人机交互指令的应用掌握等待类指令用法&#xff08;WaitDI、WaitUnitl 等&#xff09;认…

02 Linux编程-文件

1、文件描述符 对于内核而言&#xff0c;所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时&#xff0c;内核向进程返回一个文件描述符。当读写一个文件时&#xff0c;用open和creat返回的文件描述符标识该文件&#xff0c;将…

n5.树(中)

1、二叉树的遍历 1.1先序、中序、后序遍历 先序遍历 根->左->右 先序遍历先访问根节点&#xff0c;再访问它的左子树&#xff0c;然后访问它的右子树。对于每次访问到的结点&#xff0c;都要递归地访问左子树、后右子树———递归。 创建 typedef struct TreeNode*…

点云体积计算方法之一 附python代码

一句话描述思路:通过统计计算点云所占用的体素的数量来计算点云的近似体积。这是一个粗略的近似值,对于复杂的形状可能不准确。 另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了…

飞跨电容型的三电平(FC-NPC)逆变器simulink仿真模型

本人搭建了飞跨电容型的三电平逆变器simulink仿真模型&#xff0c;相较于二极管钳位型三电平逆变器而言&#xff0c;钳位二极管变为飞跨的电容。采用SPWM调制和均流均压控制&#xff0c;通过搭建仿真模型得到三电平波形。 三电平拓扑中的飞跨电容是指在电路的输出端使用电容来实…

书生作业:LMDeploy

自己随便说几句。 关于模型部署&#xff0c;很有趣的一件事就是&#xff0c;它一路随着深度学习训练一起发展&#xff0c;尽管例如tensorrt等工具的出现&#xff0c;不断试图降低部署门槛&#xff0c;但是实际上&#xff0c;每一次AI的升级&#xff0c;似乎让这个细分领域没有…

C++面向对象

面向对象的三大特征 封装 目的:隐藏实现细节,实现模块化。特性: 访问权限 public:对所有对象开放。protected:对子类开放。private:只对自己开放。可以通过友元类打破 private 限定。对属性和方法进行限定。class A {friend class B; // B 可以访问 c public:int a;void …