伪类型
介绍
Vastbase数据类型中包含一系列特殊用途的类型,这些类型按照类别被称为伪类型。伪类型不能作为字段的数据类型,但是可以用于声明函数的参数或者结果类型。
当一个函数不仅是简单地接受并返回某种SQL数据类型的情况下,伪类型是很有用的。表1列出了所有的伪类型。
声明用C编写的函数(不管是内置的还是动态装载的)都可以接受或者返回任何这样的伪数据类型。当伪类型作为参数类型使用时,用户需要保证函数的正常运行。
用过程语言编写的函数只能使用实现语言允许的伪类型。目前,过程语言都不允许使用作为参数类型的伪类型,并且只允许使用void和record作为结果类型。一些多态的函数还支持使用anyelement、anyarray、anynonarray anyenum和anyrange类型。
每一个被声明为anyelement的位置(参数或返回值)被允许具有任意特定的实际数据类型,但是再任何给定的查询中他们必须全部是相同的实际类型。
伪类型internal用于声明那种只能在数据库系统内部调用的函数,它们不能直接在SQL查询里调用。如果函数至少有一个internal类型的参数,则不能从SQL里调用它。建议不要创建任何声明返回internal的函数,除非该函数至少有一个internal类型的参数。
示例
创建表
create table t1 (a int);
插入两条数据
insert into t1 values(1),(2);
创建函数showall()。
CREATE OR REPLACE FUNCTION showall() RETURNS SETOF record AS $$ SELECT count(*) from t1; $$ LANGUAGE SQL;
调用函数showall()。
SELECT showall();
返回结果为:
showall --------- (2) (1 row)
删除函数。
DROP FUNCTION showall();
删除表
drop table t1;