人大金仓数据库KingbaseES PLSQL基本数据类型

金仓数据库PLSQL基本数据类型

关键字:

KingbseES 、PLSQL、基本数据类型、人大金仓

标量类型

PLSQL中常用的标量类型如下表所示:

数据类型

示例

数字类型

smallint、integer、bigint、decimal、numeric、real、double precision、smallserial、serial、bigserial

字符类型

character varying(n), varchar(n)、character(n), char(n)、text

日期/时间类型

timestamp [(p) ] [without time zone ]、timestamp [(p) ] with time zone、date、time [ (p)] [ without time zone ]、time [ (p)] with time zone、interval [fields ] [(p) ]

货币类型

money

二进制类型

bytea

布尔类型

boolean

数组类型

数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名

几何类型

point、line、lseg、box、path、polygon、circle

网络地址类型

cidr、inet、macaddr

位串类型

bit(n)、bit varying(n)

文本搜索类型

Tsvector、tsquery

JSON类型

json 、jsonb

范围类型

Int4range、 int8range、numrange、tsrange、 tstzrange、 daterange

Pglsn type

pg_lsn

伪类型

Any、anyelement、anyarray、anynonarray、anyenum、anyrange、cstring、internal、language_handler、fdw_handler、index_am_handler、tsm_handler、record、trigger、event_trigger、pg_ddl_command、void、opaque

用户自定义类型

CREATE TYPE在当前数据库中注册一种新的数据类型,共有五种形式的CREATE TYPE:组合类型、枚举类型、范围类型、基础类型或者shell 类型,具体如下表所示:

数据类型

语法

示例

组合类型

CREATE TYPE name AS

CREATE TYPE var_type1 AS (id int,name varchar(30));

枚举类型

CREATE TYPE name AS ENUM

CREATE TYPE enum1 AS ENUM ('sad', 'ok', 'happy');

RANGE类型

CREATE TYPE name AS RANGE

CREATE TYPE floatrange AS RANGE (

subtype = float8,

subtype_diff = float8mi

);

基础类型

CREATE TYPE name

CREATE TYPE complex (

internallength = 16,

input = complex_in,

output = complex_out

);

空类型

CREATE TYPE name

CREATE TYPE complex;

%TYPE

%TYPE的使用方式有:

●使用列属性或变量名加上%TYPE来标识字段类型。

●用来表示一个和已有表字段具有相同类型的类型。

●除继承字段类型外,不能继承字段的其他属性。

示例:

\set SQLTERM ;

create table tt1(id int,name varchar(50));

insert into tt1 values(1,'kingbase');

\set SQLTERM /

DECLARE

a1 tt1.id%type;

a2 tt1.name%type;

BEGIN

SELECT id,name INTO a1,a2 FROM tt1;

RAISE NOTICE ‘%’,a1;

RAISE NOTICE ‘%’,a2;

END;

/

4.%ROWTYPE

%ROWTYPE类型用法如下:

●一个复合类型,叫做行变量

●用来表示和一个现有的表或者视图的行类型相同的类型

●一个%rowtype类型变量,可存放SELECT检索结果集的一条记录

示例:

CREATE TABLE t1(id int,name varchar(50));

insert into t1 values(1,'kingbase');

\set SQLTERM /

DECLARE

a1 t1%rowtype;

BEGIN

SELECT id,name INTO a1 FROM t1;

RAISE NOTICE '%',a1.id;

RAISE NOTICE '%',a1.name;

END;

/

5.集合类型

集合类型是一种复合类型,包括以下三种:关联数组、嵌套表、可变数组。

  1. 关联数组

(1)关联数组具有唯一键值的集合类型,具有以下特性:

●包含零活多个具有相同类型的元素

●用户可按键值检索

●键值可以是整型等数值类型,也可是字符串等非数值类型

●键值连续且有序

●关联数组只能用于PL/SQL环境

(2)关联数组的语法:

TYPE assoc_type_name IS TABLE OF element_type [ NOT NULL ] INDEX BY index_type;

index_type ::= INT | VARCHAR | VARCHAR2 | TEXT

(3)关联数组示例:

\set SQLTERM /

DECLARE

TYPE my_assoc_array_type1 IS TABLE OF varchar(20) INDEX BY varchar(20);

var1 my_assoc_array_type1;

i varchar(20);

BEGIN

var1('c1') :='kingbase';

var1('c2') :='tianjin';

i :=var1.first;

WHILE i is not null LOOP

DBNS_OUTPUT.PUT_LINE(var1(i));

i :=var1.next(i);

END LOOP;

END;

/

  1. 嵌套表

(1)嵌套表是基于键值对的集合类型,具有以下特性:

●与关联数组相比,它的键值只能为整型,即从1开始的连续值

●必须使用和其同名的构造函数进行初始化

(2)嵌套表的语法:

TYPE nest_table_type_name IS TABLE OF element_type [ NOT NULL ];

(3)嵌套表示例:

DECLARE

TYPE my_nest_table_type1 IS TABLE OF VARCHAR(50);

var1 my_nest_table_type1 :=my_nest_table_type1();

i varchar(20);

BEGIN

var1 :=my_nest_table_type1('kingbase','tianjin','beijing');

FOR i IN 1..var1.count LOOP

DBMS_OUTPUT.PUT_LINE(var1(i));

END LOOP;

END;

/

3.可变数组

(1)可变数组为INT且从1开始,具有以下特性:

●可变数组在定义时需指定最大元素个数,且在应用中不能超过该限制

●可变数组的下标必须连续

●删除元素时,可变数组不能使用delete(n)和delete(m,n)方法,但可以使用delete()方法,删除所有元素。

(2)可变数组语法:

TYPE varray_type_name IS VARRAY(size_limit) OF  element_type [ NOT NULL ];

(3)可变数组示例:

\set SQLTERM /

DECLARE

TYPE my_varray_type1 IS VARRAY(10) OF VARCHAR(50);

var1 my_varray_type1 := my_varray_type1();

i varchar(20);

BEGIN

var1.extend(3);

var1(1) :=‘kingbase’;

var1(2) :=‘beijing’;

var1(3) :=‘tianjin’;

FOR i IN 1..var1.count LOOP

DBMS_OUTPUT.PUT_LINE(var1(i));

END LOOP;

END;

/

6.RECORD类型

(1)记录类型由单行多列的标量构成的复合结构,将一个或多个标量封装成一个对象。

(2)记录类型的语法:

TYPE record_type IS RECORD (filed1 type1[not null][:=expr1]

[, RECORD(filed1 type1[not null][:=expr1]]

);

(3)记录类型示例:

\set SQLTERM /

DECLARE

TYPE my_record_type1 IS RECORD(a1 int default 10,a2 varchar(20) default 'kingbase');

var1 my_record_type1;

BEGIN

DBMS_OUTPUT.PUT_LINE(var1.a1);

DBMS_OUTPUT.PUT_LINE(var1.a2);

var1.a1 :=20;

DBMS_OUTPUT.PUT_LINE(var1.a1);

END;

/

参考资料

《KingbaseES 产品手册》

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值