返回首页

gbase数据、南大通用产品文档:GBase8s错误的标签位置(Incorrect Label Placement)

更新日期:2024年09月11日

DECLARE
done BOOLEAN;
BEGIN
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
<>
END LOOP;
END;

--Result:
--END LOOP;
--*
--ERROR at line 9:
--ORA-06550: line 9, column 3:
--PLS-00103: Encountered the symbol "END" when expecting one of the following:
--( begin case declare exit for goto if loop mod null raise
--return select update while with
-- <<
--continue close current delete fetch lock insert open rollback
--savepoint set sql run commit forall merge pipe purge

DISTINCT 类型是从源类型(称为基本类型)派生的数据类型。
源类型可以是:
内置类型
现有 DISTINCT 类型
现有命名 ROW 类型
现有不透明类型
DISTINCT 类型继承其源类型在磁盘上的长度和对齐方式。因此,DISTINCT 类型高效
地使用数据库服务器预先存在的功能。
创建 DISTINCT 数据类型时,数据库服务器将自动创建两种显式强制转型:一种从
DISTINCT 类型强制转型为其源类型,另一种是从源类型强制转型为 DISTINCT 类型。基于
内置源类型的 DISTINCT 类型不继承为内置类型提供的内置强制转型。但是,DISTINCT 类
型却继承已对源类型定义的任何用户定义的强制转型。
DISTINCT 类型不能直接与其源类型进行比较。要比较这两种类型,首先必须显式地将
一种类型强制转型为另一种类型。
必须在数据库中定义 DISTINCT 类型。DISTINCT 类型的定义存储在 sysxtdtypes 系
统目录表中。以下 SQL 语句会维护数据库中 DISTINCT 类型的定义:
CREATE DISTINCT TYPE 语句将 DISTINCT 类型添加至数据库。
DROP TYPE 语句从数据库中除去先前定义的 DISTINCT 类型。
有关上面提到的 SQL 语句的更多信息,请参阅 GBase 8s SQL 指南:语法。有关对
DISTINCT 数据类型强制转型的信息,请参阅单值类型的强制转型。有关显示如何创建和注
册 DISTINCT 类型的强制转型函数的示例,请参阅《GBase 8s 数据库设计和实现指南》。

基本类型为内置字符类型的 DISTINCT 类型的声明中的大小规范可受字符类型声明中
的逻辑字符语义一节中描述的 SQL_LOGICAL_CHAR 功能影响。

CAST 和CONVERT 函数
语法
CAST(expr AS type) ,CONVERT(expr,type) ,CONVERT(expr USING
transcoding_name)
函数说明
CAST()和CONVERT()函数用于将一个类型的数值转换到另一个类型。

type 可以是下列值之一:

CHAR、DATE、DATETIME、DECIMAL、TIME、NUMERIC、INT、
FLOAT、DOUBLE、VARCHAR、TIMESTAMP。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
668

CAST()和CONVERT(...USING...)是标准的SQL 语法。

CAST(str AS BINARY)等价于BINARY str。

CAST(expr AS CHAR)把表达式看作是默认字符集中的字符串。

CAST(expr AS float(M,D))、
CAST(expr AS double(M,D))中M 最大值255,
D 最大值30。

CAST(expr AS Float(X))指定长度,当X<24 时,按照float 处理;当
24注意
使用CAST()函数改变列类型为DATE,DATETIME 或TIME,只是标识此
列,使其变为一个指定的数据类型,而不是改变列的值。
CAST()的最终执行结果将会转化为指定的列类型。
查询时将数据使用cast 转化为varchar(0)会输出空串,使用create table as
select from 从已有表中查询非空列进行转换varchar 建新表,如果非空列转
换成varchar(0)会报错。
示例
示例1:将NOW()转换为DATE 类型。
gbase> SELECT CAST(NOW() AS DATE) FROM dual;
+---------------------+
| CAST(NOW() AS DATE) |
+---------------------+
| 2020-04-01
|
+---------------------+
1 row in set
示例2:字符串和数字类型的转换是隐式操作,用户使用时只要把字符串值当做
一个数字即可。
gbase> SELECT 1+'1' FROM dual;
+-------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
669
| 1+'1' |
+-------+
|
2 |
+-------+
1 row in set
示例3:CAST(str AS BINARY)等价于BINARY str。
gbase> SELECT CAST('a' AS BINARY) = 'a ' FROM dual;
+----------------------------+
| CAST('a' AS BINARY) = 'a ' |
+----------------------------+
|
0 |
+----------------------------+
1 row in set
gbase>
SELECT 'A' = 'a ';
+------------+
| 'A' = 'a ' |
+------------+
|
1 |
+------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT BINARY 'A' = 'a ' FROM dual;
+-------------------+
| BINARY 'A' = 'a ' |
+-------------------+
|
0 |
+-------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
670
示例4:CAST(str AS varchar(X))示例
gbase> select cast('1.2345' as varchar) as data_varchar;
+--------------+
| data_varchar |
+--------------+
| 1.2345
|
+--------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select cast('1.2345' as varchar(10)) as data_varchar;
+--------------+
| data_varchar |
+--------------+
| 1.2345
|
+--------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select cast('1.2345' as varchar(3)) as data_varchar;
+--------------+
| data_varchar |
+--------------+
| 1.2
|
+--------------+
1 row in set, 1 warning (Elapsed: 00:00:00.00)
gbase> select cast('1.2345' as varchar(0)) as data_varchar;
+--------------+
| data_varchar |
+--------------+
|
|
+--------------+
1 row in set, 1 warning (Elapsed: 00:00:00.01)
gbase> create table t3 as select cast(a as varchar) as a from t;
Query OK, 2 rows affected (Elapsed: 00:00:00.51)
gbase> desc t3;
+-------+-------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a
| varchar(11) | YES
|
| NULL
|
|
+-------+-------------+------+-----+---------+-------+
1 row in set (Elapsed: 00:00:00.00)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
671
gbase> create table t4 as select cast(a as varchar(0)) as a from t;
ERROR 1705 (HY000): gcluster DML error:
[192.168.146.21:5050](GBA-02AD-0005)Failed to query in gnode:
DETAIL: Truncated incorrect CHAR(0) value: '1'
SQL: SELECT /*192.168.146.20_6_31_2021-01-14_15:25:42*/ /*+
TID('111') */ cast(`vcname000001.testdb.t`.`a` as char(0)) AS `a` FROM
`testdb`.`t_n1` `vcname000001.testdb.t` target into server (HOST
'192.168.146.21,192.168.146.20', PORT 5050, USER 'root', PASSWORD '',
DATABASE 'testdb', TABLE 't4_n1', COMMENT 'col_seq 0, table_host 0 0
1, scn 18, distribution 1' )