全局系统函数

和任何数据库的 SQL 语言一样,PQL 支持系统函数,可以像使用变量一样嵌入到语句的任何地方。所以 PQL 不仅可以通过 Sharp 表达式操作数值,还可以使用函数。

上例效果与下列 Sharp 表达式操作效果相同。

全局变量一样,系统函数使用@开头。虽然大多数情况下功能与 Sharp表达式相同,但 PQL 仍建议使用 Sharp 表达式作为处理数据的手段。一个原因是避免混乱,因为所有原生的 SQL 都支持函数,而且名称有的会与 PQL 函数相同,区别只是差别一个@号;二是为了避免逻辑不清,各数据库的原生函数作用于每行数据,而 PQL 函数只作用于单值。

函数与其他嵌入式操作的优先级顺序为:用户变量 优先于 系统变量 优先于 自定义或全局函数 优先于 Sharp 表达式,所以可以在函数中把变量当作函数的参数,也可以在 Sharp 表达式运算过程中使用函数。

为了照顾不同的数据库 SQL 语言习惯,PQL 中会有不同的函数名称来完成同一个操作。

除些之外还有一个判断函数@IFNULL(value, other)@NVL(value, other),当指定值valuenull时,则返回另一个值other

自定义系统函数

可以定义自己的系统函数,可以作用于整个系统,可以在任何 PQL 中使用。只能使用 Master 管理工具在系统设置的系统函数中定义。另外一种方式是使用下面的语句定义系统函数,但如果没有 Qross 系统支持,则其作用基本与用户函数相同,在运行 PQL 的程序退出时即失效。(会在未来版本中支持)

自定义系统函数的结构与用户函数相同,只是前缀符号由$改为@,与用户变量与全局变量的逻辑相同。自定义系统函数在调用时也加@前缀符号,与系统函数相同。自定义系统函数主要分为三部分:

即除了名称以@开头以外,其他逻辑都与用户函数相同。

使用 PQL 系统函数

对于返回值的系统函数,可以嵌入到其他语句中使用,就像全局变量一样。

对于没有返回值但是实现业务逻辑的系统函数,可以使用 CALL 语句调用。

为了表达更清晰,对于无参系统函数,可以省略小括号,例如@KEEPER_IS_RUNNING。更多信息可参考 CALL 语句

函数之间的区别和差异

PQL 提供了 用户函数系统函数自定义系统函数 三种概念,不同类型的函数之间具有一定的差异,现分别说明如下:

系统函数的所有者

在 Qross 系统中,任何用户都可以定义系统函数,但是只有系统管理员可以在系统设置中定义适用于所有用户的系统函数,所有用户在 Qross 系统“数据”模块定义的系统函数只有本人可以在自己编写的 PQL 中使用。在数据权限不敏感的情况下,建议由系统管理员定义系统函数。如果个人系统函数和全局系统函数名称相同,则优先调用个人系统函数。


参考链接


微信公众号
码农老吴  |  星源工作室  |  开发月志  |  问题反馈
联系我们:wu@qross.io     手机/微信:18618171102
京 ICP 备 20027445 号
$(h1)!