支持以下数据类型:
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)