支持以下数据类型:
VARCHAR2
NVARCHAR2
DATE
RAW
PLS_INTEGER
BINARY_FLOAT
BINARY_DOUBLE
XMLType
LONG
语法
指定VARCHAR2类型如下。
Table 9.26. VARCHAR2语法
|
数据类型语法 |
说明 |
|---|---|
|
VARCHAR2(len [byte|char]) |
变长字符串,最多可包含len个字符。 对于len,请指定大于0的整数。 如果省略len,则字符串可以是任意长度。 自23.1版本以来,LightDB实现了此语法,以兼容Oracle的varchar2类型。 在len后面的关键字byte或char是可选的,仅与Oracle语法兼容, 内部实现与只有len而没有byte或char关键字的实现相同。 |
通用规则
VARCHAR2是一种字符数据类型。请指定长度所需的字符数。
字符串长度可变。指定的值将被存储为原样。 此数据类型的上限约为1GB。
注意
VARCHAR2类型不支持排序序列。因此,在需要类似于ORDER BY子句的排序序列时, 会发生以下错误。此时,以下提示将提示使用COLLATE子句, 但是,由于不支持排序序列,因此无法使用此子句。
ERROR: could not determine which collation to use for string comparison
HINT: Use the COLLATE clause to set the collation explicitly.
如果显示了上面显示的错误,请将列显式转换为VARCHAR或TEXT类型。
示例
lightdb@postgres=# create table t1(name varchar2(10));
CREATE TABLE
lightdb@postgres=#
lightdb@postgres=# \d+ t1
Table "public.t1"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+--------------+-----------+----------+---------+---------+--------------+-------------
name | varchar2(10) | | | | plain | |
Access method: heap
lightdb@postgres=#
lightdb@postgres=# create table t2(name varchar2(10 byte));
CREATE TABLE
lightdb@postgres=#
lightdb@postgres=# \d+ t2
Table "public.t2"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+--------------+-----------+----------+---------+---------+--------------+-------------
name | varchar2(10) | | | | plain | |
Access method: heap
lightdb@postgres=#
lightdb@postgres=# create table t3(name varchar2(10 char));
CREATE TABLE
lightdb@postgres=#
lightdb@postgres=# \d+ t3
Table "public.t3"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+--------------+-----------+----------+---------+---------+--------------+-------------
name | varchar2(10) | | | | plain | |
Access method: heap
lightdb@postgres=#
语法
指定NVARCHAR2类型如下。
Table 9.27. NVARCHAR2语法
|
数据类型语法 |
解释 |
|---|---|
|
NVARCHAR2(len) |
变长国家字符字符串,最多可包含len个字符。 对于len,请指定大于0的整数。 如果省略len,则字符串可以是任意长度。 |
通用规则
NVARCHAR2是一种国家字符数据类型。请指定长度所需的字符数。
字符串长度可变。指定的值将被存储为原样。 此数据类型的上限约为1GB。
注意
NVARCHAR2类型不支持排序序列。因此,在需要类似于ORDER BY子句的排序序列时, 会发生以下错误。此时,以下提示将提示使用COLLATE子句, 但是,由于不支持排序序列,因此无法使用此子句。
ERROR: could not determine which collation to use for string comparison
HINT: Use the COLLATE clause to set the collation explicitly.
如果显示了上面显示的错误,请将列显式转换为NCHAR VARYING或TEXT类型。
语法
指定DATE类型如下。
Table 9.28. 日期语法
|
数据类型语法 |
解释 |
|---|---|
|
DATE |
存储日期和时间 |
通用规则
DATE是一种日期/时间数据类型。
日期和时间存储在DATE中。时区不会被存储。
注意
如果在DDL语句(如表定义)中使用orafce的DATE类型,请在执行DDL语句之前始终设置search_path。 即使在定义之后更改了search_path,数据类型也将是LightDB的DATE类型。
信息
orafce的DATE类型等同于LightDB的TIMESTAMP类型。 因此,可以使用参数数据类型为TIMESTAMP的现有LightDB函数。
语法
指定 RAW 类型如下。
Table 9.29. RAW 语法
|
RAW 类型语法 |
解释 |
|---|---|
|
RAW(len) |
存储可变长度的二进制数据。外部表示为十六进制。 len 只是为了与 Oracle 兼容,没有实际作用。 二进制数据可以是任意长度。 |
通用规则
RAW 是一个可变长度的十六进制数据类型。
十六进制字符串长度可变。指定的值将被存储为二进制数据。此数据类型的上限约为 1GB。
语法
指定 PLS_INTEGER 类型如下。
Table 9.30. PLS_INTEGER 语法
|
PLS_INTEGER 类型语法 |
解释 |
|---|---|
|
PLS_INTEGER |
PLS_INTEGER 数据类型以 32 位表示带符号整数,范围为 -2,147,483,648 到 2,147,483,647。 |
通用规则
PLS_INTEGER 类似于 int4。
语法
指定 BINARY_FLOAT 类型如下。
Table 9.31. BINARY_FLOAT 语法
|
BINARY_FLOAT 类型语法 |
解释 |
|---|---|
|
BINARY_FLOAT |
BINARY_FLOAT是一种32位单精度浮点数的数据类型。每个BINARY_FLOAT值需要4个字节。 |
通用规则
BINARY_FLOAT 类似于 float4.
与oracle相同,都遵循IEEE754标准。
例子
lightdb@test_o=# create table t1(key1 binary_float);
CREATE TABLE
lightdb@test_o=# \d+ t1
Table "public.t1"
Column | Type | Collation | Nullable | Default | Storage | Sta
ts target | Description
--------+---------------+-----------+----------+---------+---------+----
----------+-------------
key1 | binary_float | | | | plain |
|
Access method: heap
lightdb@test_o=# insert into t1 values(123456789012345678901234567890123456789);
INSERT 0 1
lightdb@test_o=# insert into t1 values('infinity');
INSERT 0 1
lightdb@test_o=# insert into t1 values('NaN');
INSERT 0 1
lightdb@test_o=# select * from t1;
key1
---------------
1.2345679e+38
Infinity
NaN
(3 rows)
语法
指定 BINARY_DOUBLE 类型如下。
Table 9.32. BINARY_DOUBLE 语法
|
BINARY_DOUBLE 类型语法 |
解释 |
|---|---|
|
BINARY_DOUBLE |
BINARY_DOUBLE是一种64位双精度浮点数的数据类型。每个BINARY_DOUBLE值需要8个字节。 |
通用规则
BINARY_DOUBLE 类似于 float8。
与oracle相同都遵循IEEE754标准。
例子
lightdb@test_o=# create table t1(key1 binary_double);
CREATE TABLE
lightdb@test_o=# \d+ t1
Table "public.t1"
Column | Type | Collation | Nullable | Default | Storage | Sta
ts target | Description
--------+---------------+-----------+----------+---------+---------+----
----------+-------------
key1 | binary_double | | | | plain |
|
Access method: heap
lightdb@test_o=# insert into t1 values(123456789012345678901234567890123456789);
INSERT 0 1
lightdb@test_o=# insert into t1 values('infinity');
INSERT 0 1
lightdb@test_o=# insert into t1 values('NaN');
INSERT 0 1
lightdb@test_o=# select * from t1;
key1
------------------------
1.2345678901234568e+38
Infinity
NaN
(3 rows)
语法
按如下方式指定XMLType类型。
Table 9.33. XMLType 语法
|
XMLType 语法 |
解释 |
|---|---|
|
XMLType |
XMLType是一个对象类型,可以用来存储XML数据。 |
通用规则
XMLType是xml数据类型。
支持oracle.XMLType和pg_catalog.xml之间的隐式转换。
成员函数
function getClobVal() return CLOB
以文本形式返回XML
例子
lightdb@postgres=# create database test_oracle lightdb_syntax_compatible_type oracle;
CREATE DATABASE
lightdb@postgres=# \c test_oracle
You are now connected to database "test_oracle" as user "lightdb".
compatible type: oracle
lightdb@test_oracle=# select dbms_output.serveroutput(true);
serveroutput
--------------
(1 row)
lightdb@test_oracle=# CREATE TABLE xml_table (id NUMBER, xml_column XMLType );
CREATE TABLE
lightdb@test_oracle=# INSERT INTO xml_table (id, xml_column) VALUES (1, XMLType('<root><name>John</name></root>'));
INSERT 0 1
lightdb@test_oracle=# DECLARE
lightdb@test_oracle$# v_clob CLOB;
lightdb@test_oracle$# BEGIN
lightdb@test_oracle$# SELECT XMLType.getClobVal(xml_column)
lightdb@test_oracle$# INTO v_clob
lightdb@test_oracle$# FROM xml_table
lightdb@test_oracle$# WHERE id = 1;
lightdb@test_oracle$# DBMS_OUTPUT.PUT_LINE('CLOB value: ' || v_clob);
lightdb@test_oracle$# END;
lightdb@test_oracle$# /
CLOB value: <root><name>John</name></root>
DO
lightdb@test_oracle=# DECLARE
lightdb@test_oracle$# xml_data XMLType;
lightdb@test_oracle$# clob_data CLOB;
lightdb@test_oracle$# BEGIN
lightdb@test_oracle$# xml_data := XMLType('<root><name>John Doe</name></root>');
lightdb@test_oracle$# clob_data := xml_data.getClobVal();
lightdb@test_oracle$# DBMS_OUTPUT.PUT_LINE(clob_data);
lightdb@test_oracle$# END;
lightdb@test_oracle$# /
<root><name>John Doe</name></root>
DO
lightdb@test_oracle=# SELECT XMLType.getClobVal(xml_column) from xml_table;
getclobval
--------------------------------
<root><name>John</name></root>
(1 row)