Kingbase create type类型创建语句

说明:

KingbaseES 数据库中,可以通过CREATE TYPE语句定义一种新的数据类型。

有八种形式的CREATE TYPE。它们分别创建组合类型、枚举类型、 范围类型、基础类型、shell 类型、嵌套表类型、可变数组类型和对象类型。下文将依次讨论这些形式。

1.组合类型:

组合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用 CREATE TYPE避免了创建一个实际的表。

语法:
CREATE TYPE name AS
( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] )
示例:
create type comb_type as (c1 int , c2 varchar2(20) ); create table combtable (c1 int , c2 varchar2(20) , c3 varchar2(20)); insert into combtable values(1,'zhangsan','beijing'),(2,'lisi','shanghai'); declare
comb comb_type;
begin
for i in (select c1 , c2 from combtable) loop
select i.c1 , i.c2 into comb from dual;
raise notice 'comb_type = %',comb;
end loop ;
end create or replace FUNCTION getcomb() RETURNS SETOF comb_type AS $$
select c1 , c2 FROM combtable
$$ LANGUAGE SQL; select * from getcomb();

2.枚举类型:

枚举类型需要一个带引号的标签构成的列表,每一个标签长度必须不超过 NAMEDATALEN字节(在标准的 KingbaseES编译中是 64 字节)。

语法:
CREATE TYPE name AS ENUM
( [ 'label' [, ... ] ] )
示例:
CREATE TYPE enumtype AS ENUM ('first', 'second', 'third'); CREATE TABLE enumtable (
id serial,
status enumtype
); insert into enumtable(status) values('first') ,('second'); select * from enumtable;

3.范围类型:

语法:
CREATE TYPE name AS RANGE (
SUBTYPE = subtype
[ , SUBTYPE_OPCLASS = subtype_operator_class ]
[ , COLLATION = collation ]
[ , CANONICAL = canonical_function ]
[ , SUBTYPE_DIFF = subtype_diff_function ]
)
Range类型的输入格式:
'(lower-bound,upper-bound)'
'(lower-bound,upper-bound]'
'[lower-bound,upper-bound)'
'[lower-bound,upper-bound]'
'empty' 其中,"(" 和 ")" 表示定义的范围不包括此元素,"[" 和 "]" 表示定义的范围包括此元素,'empty' 表示空,空表示范围内不包含任何东西。
示例:
CREATE TYPE float8range AS RANGE (subtype = float8, subtype_diff = float8mi); create table rangetable (id serial , num float8range); insert into rangetable(num) values('(1.12,3.45)') , ('(1.12,3.45)'); select * from rangetable;

4.基础类型:

语法:
CREATE TYPE name (
INPUT = input_function,
OUTPUT = output_function
[ , RECEIVE = receive_function ]
[ , SEND = send_function ]
[ , TYPMOD_IN = type_modifier_input_function ]
[ , TYPMOD_OUT = type_modifier_output_function ]
[ , ANALYZE = analyze_function ]
[ , INTERNALLENGTH = { internallength | VARIABLE } ]
[ , PASSEDBYVALUE ]
[ , ALIGNMENT = alignment ]
[ , STORAGE = storage ]
[ , LIKE = like_type ]
[ , CATEGORY = category ]
[ , PREFERRED = preferred ]
[ , DEFAULT = default ]
[ , ELEMENT = element ]
[ , DELIMITER = delimiter ]
[ , COLLATABLE = collatable ]
)

5.shell 类型:

shell 类型仅仅是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。

语法:
CREATE TYPE name

6.嵌套表类型:

语法:
CREATE TYPE name AS TABLE OF datatype [NOT NULL]
示例:
CREATE TYPE int_table AS TABLE OF INT NOT NULL; declare
inttab int_table;
i INT;
begin
inttab := int_table(1,2,3,4,5);
i := inttab.first();
WHILE i IS NOT NULL LOOP
RAISE NOTICE 'inttab(%) is %', i, inttab(i);
i := inttab.next(i);
END LOOP;
end

7.可变数组类型:

可变数组的下标索引类型为 INT 并且从 1 开始。与嵌套表不同,可变数组在定义的时候需要指定最大元素个数,使用中不能超过该限制。

语法:
CREATE TYPE name AS VARRAY(size_limit) OF datatype [NOT NULL]
示例:
create type varray100 is varray (20) of int; declare
var varray100 = varray100();
begin
var.extend();
RAISE NOTICE 'var lenght %', var.count();
var.extend(10);
RAISE NOTICE 'var lenght %', var.count(); var.delete;
var.extend();
var(1) := 7;
var.extend(19, 1);
RAISE NOTICE 'var lenght %', var.count();
RAISE NOTICE 'var first() = %', var.first();
RAISE NOTICE 'var last() = %', var.last();
end

8.对象类型:

语法:
CREATE [ OR REPLACE ] TYPE name [ FORCE ] [ AUTHID { CURRENT_USER | DEFINER } ]
{ AS | IS } OBJECT (
attribute_name data_type [, ... ]
[, subprogram_spec [, ... ] ]
[, constructor_spec [, ... ] ]
)
这里 subprogram_spec 是以下之一:
{ STATIC | MEMBER } FUNCTION function_name
[ ( [ argname [ argmode ] argtype [ { DEFAULT | := } default_expr ] [, ...] ] ) ]
{ RETURNS | RETURN } rettype ]
{ STATIC | MEMBER } PROCEDURE procedure_name
[ ( [ argname [ argmode ] argtype [ { DEFAULT | := } default_expr ] [, ...] ] ) ] constructor_spec 是:
CONSTRUCTOR FUNCTION name
[ ( [ SELF IN OUT name ] [, argname [ argmode ] argtype [ { DEFAULT | := } default_expr ] [, ...] ] ) ]
{ RETURNS | RETURN } SELF AS RESULT
示例:
CREATE OR REPLACE TYPE objtype FORCE AUTHID CURRENT_USER AS OBJECT(
f1 int,
f2 varchar2(10),
MEMBER FUNCTION memfunc(i int) RETURN INT,
STATIC PROCEDURE staproc,
CONSTRUCTOR FUNCTION objtype(self in out objtype) RETURN SELF AS RESULT
); CREATE OR REPLACE TYPE BODY objtype AS
MEMBER FUNCTION memfunc(i int) RETURN INT AS
BEGIN
RAISE NOTICE 'self.f1 is %', self.f1;
RAISE NOTICE 'self.f2 is %', f2;
RETURN i;
END; STATIC PROCEDURE staproc AS
BEGIN
RAISE NOTICE 'this is a static procedure in object type';
END; CONSTRUCTOR FUNCTION objtype(self in out objtype) RETURN SELF AS RESULT as
begin
f1 := 1;
self.f2 := 'a';
RETURN ;
END;
END; CREATE TABLE tb1(i objtype);
INSERT INTO tb1 select * from objtype(2, 'b');
INSERT INTO tb1 select * from objtype(); SELECT * FROM tb1; CALL objtype.staproc();

Kingbase Create Type 语句使用的更多相关文章

  1. type和create type

    type和create type 异同点:      create type 可在库中生成一个长期有效的自定义类型对象,而type作用域仅限于语句块中:      两者都可以自定义数据类型: 各种ty ...

  2. 翻译:CREATE FUNCTION语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:CREATE FUNCTION的译文. 原文:https://mariadb.com/kb/en/library/create-function/我提交到MariaDB官 ...

  3. 转载:oracle 自定义类型 type / create type

    标签:type create oracle object record 一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarc ...

  4. oracle 自定义类型 type / create type

    一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...

  5. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  6. SQL UNION 和 UNION ALL 操作符\SQL SELECT INTO 语句\SQL CREATE DATABASE 语句

    SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每 ...

  7. 基础篇之 Create Type

    Create Type 的话呢,是创建一个自定义的数据类型,等于说为常用的数据类型建造一个别名的样纸.然后就可以通用当前数据库的当前架构.(当然了,一般来说我们都是使用dbo架构,所以都会无事前面那个 ...

  8. 如何使用CREATE INDEX语句对表增加索引?

    创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.删除索引可以利用ALTER TABLE或DROP INDE ...

  9. ABP:在多语句事务内不允许使用 CREATE DATABASE 语句

    一.问题 使用ef codefirst开发,无法创建数据库的问题,如下提示 Server Error in '/' Application. 在多语句事务内不允许使用 CREATE DATABASE ...

  10. SQL CREATE INDEX 语句

    CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...

随机推荐

  1. Widget模式

    Widget模式 Widget模式是指借用Web Widget思想将页面分解成组件,针对部件开发,最终组合成完整的页面,Web Widget指的是一块可以在任意页面中执行的代码块,Widget模式不属 ...

  2. 探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架

    探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架 进入2023年以来,ChatGPT的成功带动了国内大模型的快速发展,从通用大模型.垂直领域大模型到Agent智能体等多领域的 ...

  3. CSS实现页脚始终在页面底部

    说明 最近在布局自己的博客系统,我是想练练手把时下比较流行的前后端技术串起来.同时,我会把设计和编码过程中遇到的问题或值得分享的技术点.实现方式做下总结,记录下来.本篇就是第一篇,个人能力有限,不足之 ...

  4. 【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)

    包含min函数的栈 https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元 ...

  5. Linux的这些命令你需要掌握

    查看进程: 查看所有进程:ps -ef 查看指定的进程: ps -ef|grep pid(进程号) 查看前40个内存占用的进程: ps auxw|head -1;ps auxw|sort -rn -k ...

  6. 【Azure 环境】台湾同胞:詢問大陸所有廠牌手機是否都可透過通知中心發送訊息

    什么是 Azure 通知中心? Azure 通知中心提供易于使用且向外扩展的推送引擎,可用于将通知发送到任何平台 (iOS.Android.Windows.Kindle.百度等 ) 从任何后端 (云和 ...

  7. C++11新特性的一些用法举例②

    /** C++11 * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝构造函数 拷贝赋值重载 取地址重载 const 取地址重载 最后重要的是前4个,后两个用处不大.默认 ...

  8. Java //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除)+优化

    1 //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除) 2 boolean isFlag = true; //标识i是否被j除尽,修改其值 3 4 for(int i ...

  9. CYQ.Data 支持 DaMeng 达梦数据库

    DaMeng 达梦数据库介绍: 达梦数据库(DMDB)是中国自主研发的关系型数据库管理系统,由达梦科技股份有限公司开发. 达梦数据库提供了企业级的数据库解决方案,广泛应用于金融.电信.政府.制造等行业 ...

  10. springboot,简要记录,方便复习,

    boot 笔记第一步新建工程,导包,由于boot的数据库框架是用mybtis -paus,所以关于数据库系统那儿不用色选mybatis ,需要重新maven导包完整导包以下人容: <?xml v ...