案例分析
数据库问题的案例分析。

GBase 8s 中数据类型serial与序列sequence之间的异同

GBase 8s 数据库对自增列有两种形式:serial数据类型(以及扩展的bigserial和serial8), int数据类型(以及扩展的bigint和int8)+序列组合实现。
这两种实现方式各有各的优势,以下我们以测试来说明。

创建测试表及相应的触发器、存储过程

自增数据类型serial,仅需要指明数据类型即可

-- 自增数据类型
create table tabserial (id serial, name varchar(128));

阅读全文»

影响DATE数据类型的环境变量解析

经常碰到用户说从一个库导出来的数据,到另一个库导入,或者插入数据,报失败(1205: 日期中的月份错误)。该问题其实date跟环境变量有很大关系,涉及到DBDATE,GL_DATE,CLIENT_LOCALE环境变量。
在"美国英语",即en_US环境下,DBDATE 的缺省值为 MDY4/(即12/31/2020这样的格式)。在其他环境时,DBDATE不使用缺省值,如DB_LOCALE/CLIENT_LOCALE=zh_CN.utf8时,date的格式为(2020 12月 31日),此时操作date类型的数据时,很可能就会碰上1205错误,比如:


阅读全文»

GBase 8s提高SQL查询效率的一些方法

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

3.下面的查询也将导致全表扫描:

select id from t where name like '%abcd%';

若要提高效率,可以考虑全文检索。

阅读全文»

【案例分析】创建存储过程报错误282: Found a quote for which there is no matching quote.

创建存储过程时第4行报282错误,该错误的原是说引号不匹配。创建的存储过程语句如下:

drop procedure if exists proc1;
create procedure proc1(out p_cursor sys_refcursor)
  define v_sqlstr lvarchar(1024);
  let v_sqlstr = "select tabid,tabname 
                  from systables
                  where tabid > 99
                    and tabtype = 'T'";
  open p_cursor for v_sqlstr;
end procedure;

阅读全文»

【案例分析】-1213 A character to numeric conversion process failed.

一个ER复制环境中,之前运行的好好的,突然报了错误"ER encountered a fatal error while evaluating replicate er_repl1 SQLCODE:-1213 ISAMCODE:0",然后ER复制关闭,无法再启动。
从SQLCODE错误号-1213可知,错误原因是:

-1213   A character to numeric conversion process failed.

A character value is being converted to numeric form for storage in a
numeric column or variable. However, the character string cannot be
interpreted as a number. It contains some characters other than white
space, digits, a sign, a decimal, or the letter e; or the parts are in
the wrong order, so the number cannot be deciphered.

If you are using NLS, the decimal character or thousands separator
might be wrong for your locale.

即字符转换成数值失败。


阅读全文»