GBase 8c
其他
文章

GBase 8c 数据类型——伪类型

发表于2023-12-07 17:48:4419次浏览2个评论

伪类型
 

GBase 8c支持伪类型,是一系列具有特殊用途的类型。伪类型不能作为字段的数据类型,但可以用于声明函数参数或者结果类型。GBase 8c支持的伪类型。

名称

描述

any

表示函数接受任何输入数据类型。

anyelement

表示函数接受任何数据类型。

anyarray

表示函数接受任意数组数据类型。

anynonarray

表示函数接受任意非数组数据类型。

anyenum

表示函数接受任意枚举数据类型。

anyrange

表示函数接受任意范围数据类型。

cstring

表示函数接受或者返回一个空结尾的C字符串。

internal

表示函数接受或者返回一种服务器内部的数据类型。

language_handler

声明一个过程语言调用句柄返回language_handler。

fdw_handler

声明一个外部数据封装器返回fdw_handler。

record

标识函数返回一个未声明的行类型。

trigger

声明一个触发器函数返回trigger。

void

表示函数不返回数值。

用C编写的函数,无论内置或动态装载的,都可以接受或者返回任何伪数据类型。当伪类型作为参数类型使用时,用户需要保证函数的正常运行。

用过程语言编写的函数,只能使用实现语言允许的伪类型。目前,过程语言都不允许将伪类型作为参数类型,并且只允许使用void和record作为结果类型。一些多态的函数还支持使用anyelement、anyarray、anynonarray anyenum和anyrange类型。

伪类型internal用于声明只能在数据库内部调用而不能在SQL查询调用的函数。如果函数有至少一个internal类型的参数,则不能从SQL里直接调用。建议:除非有参数要求internal类型,否则不要创建任何声明返回internal的函数。

示例:

--创建表

gbase=# create table t1 (a int);

CREATE TABLE

--插入两条数据

gbase=# insert into t1 values(1),(2);

INSERT 0 2

--创建函数showall()。

gbase=# CREATE OR REPLACE FUNCTION showall() RETURNS SETOF record AS $$ SELECT count(*) from t1;

gbase$# $$

gbase-# LANGUAGE SQL;

CREATE FUNCTION

--调用函数showall()。

gbase=# SELECT showall();

 (2)

--删除函数。

gbase=# DROP FUNCTION showall();

DROP FUNCTION

--删除表

gbase=# DROP TABLE t1;

DROP TABLE

评论

登录后才可以发表评论
崔哥发表于 9个月前
人生贵相知,何用金与钱
紫菀发表于 2个月前
加油