GBase 8s常见锁错误原因及处理办法

-243 Could not position within a table table-name.

错误原因:不能在表的数据行上加锁,该行数据已被锁
示例:
session1

dbaccess testdb -                    
drop table if exists t;
create table t(col1 int,col2 char(100));
insert into t select tabid,tabname from systables;        
begin;
delete from t where col1=1;        


阅读全文»

GBase 8s自定义使用hex或者unhex函数

从mysql迁移到GBase 8s数据库时,原有hex(有同名函数,但用法不同)、unhex函数在GBase 8s中不可用,因此需要自己创建相应的函数,可以使用C或者JAVA创建自定义例程,也可以使用存储过程。以下以存储过程方式创建。
hexstr函数实现的功能是:将文本转换成十六进制字符串显示。
unhex函数实现的功能是:将十六进制字符串转换成对应的ASCII可视文本显示。



阅读全文»

Windows下Python3通过DbtPy连接到GBase 8s数据库

示例使用的操作系统:Win 7 64bit
软件需求:Python 3.7.9

1,安装CSDK,设置环境变量

可从以下地址下载:

https://gbasedbt.com/odbc/GBase8s_3.0-Win64-ODBC-Driver.zip

免安装CSDK版本。
解压,生成的gbase8s-odbc-driver放置于D:\目录下。
在我的电脑->系统属性->高级->环境变量 中,增加环境变量GBASEDBTDIR 指向D:\gbase8s-odbc-driver,Path中增加%GBASEDBTDIR%\bin;




阅读全文»

Linux下Python3通过DbtPy连接到GBase 8s数据库

操作系统:CentOS 7.8 64-bit
软件需求:
Python 3.6.8 及Python-devel 3.6.8

有互联网连接的情况下,可以直接安装DbtPy (仅限Linux x64和Win x64)

1,直接pip3安装DbtPy,将自动安装最新的DbtPy

[root@a02 ~]# pip3 install DbtPy
Collecting DbtPy
  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/1f/45/22d842ffe40fbcb58878b891ba8f4e319a3585afd0f09ac13fd3d51b0a9b/DbtPy-3.0.5.tar.gz (165kB)
    100% |████████████████████████████████| 174kB 13.0MB/s
# 注:对于Linux x64和Win x64,这步可以需要些时间下载对应的csdk驱动。
Installing collected packages: DbtPy
  Running setup.py install for DbtPy ... done
Successfully installed DbtPy-3.0.5


阅读全文»

GBase 8s数据库SQL对象中关键字使用

数据库开发人员在使用SQL的时候,不可避免的会碰到类似以下情况。比如:使用user作为用户名的字段名称,使用timestamp作为时间戳的字段名称。然而,大多数数据库均可能把user,timestamp等作为了保留的关键字。这时如果开发人员设计了user关键字为表字段,在SQL操作时,可能就会碰到些问题。
比如以下示例:

create table tab2(id serial,user varchar(60), timestamp timestamp);

--插入记录
insert into tab2 values(0,'test001',current year to second);

阅读全文»

GBase 8s存储过程中获取当前时间

GBase 8s数据库中获取当前时间,可以使用current year to second这样方式。
但在存储过程中,如果我们想要获取某一段语句的执行时间长度,需要使用两个变量获取当时时间,如下:

drop procedure if exists proc_datetime;
create procedure proc_datetime() returns varchar(255);
  define dt1 datetime year to second;
  define dt2 datetime year to second;
  let dt1 = current year to second;
  system "sleep 5";
  let dt2 = current year to second;
  return "dt1: " || dt1 || " dt2: " || dt2;
end procedure;

阅读全文»

Oracle与GBase 8s数据类型对比-Number类型

Oracle数据库NUMBER(precision,scale)
precision表示数字中的有效位,从左边第一个不为0的数算起,小数点和负号不计入有效位数; scale表示精确到多少位,指精确到小数点左边或右边多少位(+-决定)。
如果没有指定precision的话,Oracle将使用38作为精度;
如果scale大于零,表示数字精确到小数点右边的位数;
scale默认设置为0;
如果scale小于零,Oracle将把该数字取舍到小数点左边的指定位数;
Precision的取值范围为1至38,Scale的取值范围为-84至127;
NUMBER整数部分允许的长度为(precision - scale),无论scale是正数还是负数;
如果precision小于scale,表示存储的是没有整数的小数。









阅读全文»