GBase 8s
性能调优
问答

执行语句提示,在此文句内需提供一个 blob 数据类型

发表于2026-04-24 14:06:4365次浏览8个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:gbase8s:v8.8_3633x21

【操作系统】:Linux mail.test.com 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

【CPU】:

【问题描述】*:表结构:CREATE TABLE test_all_types (

-- 1. 整数类型

col_int INT not null primary key, -- 4字节标准整型

col_smallint SMALLINT, -- 2字节短整型

col_bigint BIGINT, -- 8字节长整型

 

-- 2. 浮点与定点数

col_smallfloat SMALLFLOAT, -- 4字节单精度浮点

col_float FLOAT, -- 8字节双精度浮点

col_decimal DECIMAL(18, 4), -- 高精度定点数 (金额常用)

col_numeric NUMERIC(10, 2), -- DECIMAL 的同义词

 

-- 3. 字符与字符串

col_char CHAR(10), -- 定长字符串 (不足补空格)

col_varchar VARCHAR(100), -- 变长字符串

col_nchar NCHAR(10), -- 定长 Unicode

col_nvarchar NVARCHAR(100), -- 变长 Unicode

col_lvarchar LVARCHAR(2000), -- 大可变字符串 (最大约 32KB)

 

-- 4. 日期与时间

col_date DATE, -- 日期 (YYYY-MM-DD)

col_datetime DATETIME YEAR TO FRACTION(5), -- 日期时间 (含毫秒)

col_interval INTERVAL HOUR TO MINUTE, -- 时间间隔

 

-- 5. 二进制与大对象

col_byte BYTE, -- 二进制数据 (小对象)

col_text TEXT, -- 文本大对象 (CLOB 类似)

col_blob BLOB -- 二进制大对象

);

 

覆盖语句:MERGE INTO test_all_types TT USING (SELECT ? as col_int,? as col_smallint,? as col_bigint,? as col_smallfloat,? as col_float,? as col_decimal,? as col_numeric,? as col_char,? as col_varchar,? as col_nchar,? as col_nvarchar,? as col_lvarchar,? as col_date,? as col_datetime,? as col_interval,? as col_byte,? as col_text,? as col_blob FROM DUAL) TS ON ( TT.col_int=TS.col_int) WHEN MATCHED THEN UPDATE SET TT.col_smallint=TS.col_smallint, TT.col_bigint=TS.col_bigint, TT.col_smallfloat=TS.col_smallfloat, TT.col_float=TS.col_float, TT.col_decimal=TS.col_decimal, TT.col_numeric=TS.col_numeric, TT.col_char=TS.col_char, TT.col_varchar=TS.col_varchar, TT.col_nchar=TS.col_nchar, TT.col_nvarchar=TS.col_nvarchar, TT.col_lvarchar=TS.col_lvarchar, TT.col_date=TS.col_date, TT.col_datetime=TS.col_datetime, TT.col_interval=TS.col_interval, TT.col_byte=TS.col_byte, TT.col_text=TS.col_text, TT.col_blob=TS.col_blob WHEN NOT MATCHED THEN INSERT(col_int,col_smallint,col_bigint,col_smallfloat,col_float,col_decimal,col_numeric,col_char,col_varchar,col_nchar,col_nvarchar,col_lvarchar,col_date,col_datetime,col_interval,col_byte,col_text,col_blob) VALUES( TS.col_int, TS.col_smallint, TS.col_bigint, TS.col_smallfloat, TS.col_float, TS.col_decimal, TS.col_numeric, TS.col_char, TS.col_varchar, TS.col_nchar, TS.col_nvarchar, TS.col_lvarchar, TS.col_date, TS.col_datetime, TS.col_interval, TS.col_byte, TS.col_text, TS.col_blob)

 

字段col_byte、col_blob调用的是PreparedStatement.setBinaryStream();

JDBC执行报:在此文句内需提供一个 blob 数据类型。

字段类型历史原因规定好的改不了,有什么解决办法?

 

 

评论

登录后才可以发表评论
用户头像
liaosnet发表于 3个月前
投影列不支持使用byte和text类型。
GBase用户51447发表于 3个月前
@liaosnet:想达到覆盖写的效果,如果包含这两种类型的字段,是不是只能先查询,再执行新增或者修改。
GBase用户19279发表于 3个月前
1
GBase用户19279发表于 3个月前
2
GBase用户19279发表于 3个月前
3
GBase用户19279发表于 3个月前
4
GBase用户19279发表于 3个月前
5
用户头像
柒柒天晴发表于 2个月前
闪闪发光