GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
622
(2 rows)
示例4:
TD 模式下,
coalesce 参数输入int 和varchar 类型,
那么解析成varchar 类型。
A 模
式下会报错。
--在A 模式下,创建A 兼容模式的数据库a_1。
gbase=#CREATE DATABASE a_1 dbcompatibility = 'A';
--切换数据库为a_1。gbase=#\c a_1
--创建表t1。
a_1=# CREATE TABLE t1(a int, b varchar(10));
--查看coalesce 参数输入int 和varchar 类型的查询语句的执行计划。a_1=# EXPLAIN
SELECT coalesce(a, b) FROM t1;
ERROR: COALESCE types integer and character varying cannot be matched LINE 1:
EXPLAIN SELECT coalesce(a, b) FROM t1;
^
CONTEXT: referenced column: coalesce
--删除表。
a_1=# DROP TABLE t1;
--切换数据库为gbase。a_1=# \c gbase
--在TD 模式下,创建TD 兼容模式的数据库td_1。gbase=#CREATE DATABASE td_1
dbcompatibility = 'C';
--切换数据库为td_1。gbase=#\c td_1
--创建表t2。
td_1=# CREATE TABLE t2(a int, b varchar(10));
--查看coalesce 参数输入int 和varchar 类型的查询语句的执行计划。td_1=# EXPLAIN
VERBOSE select coalesce(a, b) from t2;
QUERY PLAN
-----------------------------------------------------------------------------
----------
Data Node Scan (cost=0.00..0.00 rows=0 width=0) Output:
(COALESCE((t2.a)::character varying, t2.b)) Node/s: All dbnodes
Remote query: SELECT COALESCE(a::character varying, b) AS "coalesce" FROM
public.t2 (4 rows)
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
623
--删除表。
td_1=# DROP TABLE t2;
--切换数据库为gbase。td_1=# \c gbase
--删除A 和TD 模式的数据库。gbase=#DROP DATABASE a_1; gbase=#DROP DATABASE td_1;
示例5:ORA 模式下,将整个表达式最终的返回值类型定为result1 的数据类型,或者与
result1 同类型范畴的更高精度的数据类型。
--在ORA 模式下,创建ORA 兼容模式的数据库ora_1。
gbase=#CREATE DATABASE ora_1 dbcompatibility = 'A';
--切换数据库为ora_1。gbase=#\c ora_1
--开启Decode 兼容性参数。
set sql_beta_feature='a_style_coerce';
--创建表t1。
ora_1=# CREATE TABLE t1(c_int int, c_float8 float8, c_char char(10), c_text text,
c_date date);
--插入数据。
ora_1=# INSERT INTO t1 VALUES(1, 2, '3', '4', date '12-10-2010');
--result1 类型为char,defresult 类型为text,text 精度更高,返回值的类型由char
更新为text。ora_1=# SELECT decode(1, 2, c_char, c_text) AS result,
pg_typeof(result) FROM t1;
result | pg_typeof
--------+-----------
4
| text (1 row)
--result1 类型为int,属于数值类型范畴,返回值的类型置为numeric。
ora_1=# SELECT decode(1, 2, c_int, c_float8) AS result, pg_typeof(result) FROM
t1; result | pg_typeof
--------+-----------
2 | numeric
(1 row)
--不存在defresult 数据类型向result1 数据类型之间的隐式转换,报错处理。ora_1=#
SELECT decode(1, 2, c_int, c_date) FROM t1;
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
624
ERROR: CASE types integer and timestamp without time zone cannot be matched LINE
1: SELECT decode(1, 2, c_int, c_date) FROM t1;
^
CONTEXT: referenced column: c_date
--关闭Decode 兼容性参数。set sql_beta_feature='none';
--删除表。
ora_1=# DROP TABLE t1;
DROP TABLE
--切换数据库为postgres。ora_1=# \c postgres
--删除ORA 模式的数据库。
gbase=#DROP DATABASE ora_1; DROP DATABASE
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
625
8
全文检索