示例使用的操作系统:Win 7 64bit
软件需求:Python 3.7.9
1,安装CSDK,设置环境变量
可从以下地址下载:
免安装CSDK版本。
解压,生成的gbase8s-odbc-driver放置于D:\目录下。
在我的电脑->系统属性->高级->环境变量 中,增加环境变量GBASEDBTDIR 指向D:\gbase8s-odbc-driver,Path中增加%GBASEDBTDIR%\bin;
示例使用的操作系统:Win 7 64bit
软件需求:Python 3.7.9
可从以下地址下载:
免安装CSDK版本。
解压,生成的gbase8s-odbc-driver放置于D:\目录下。
在我的电脑->系统属性->高级->环境变量 中,增加环境变量GBASEDBTDIR 指向D:\gbase8s-odbc-driver,Path中增加%GBASEDBTDIR%\bin;
操作系统:CentOS 7.8 64-bit
软件需求:
Python 3.6.8 及Python-devel 3.6.8
[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
数据库开发人员在使用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数据库中获取当前时间,可以使用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;
用户可能会用到二进制、八进制、十进制、十六进制之间的相互转换。
注:支持0至bigint(9223372036854775807)的间的进制转换
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,表示存储的是没有整数的小数。
GBase 8s数据库创建主键时一般情况下有两种方法:
1,创建表时指定主键,如:
create table tab1
(
id int,
name varchar(255),
primary key(id)
) in datadbs01;
GBase 8s 数据库对自增列有两种形式:serial数据类型(以及扩展的bigserial和serial8), int数据类型(以及扩展的bigint和int8)+序列组合实现。
这两种实现方式各有各的优势,以下我们以测试来说明。
自增数据类型serial,仅需要指明数据类型即可
-- 自增数据类型
create table tabserial (id serial, name varchar(128));
经常碰到用户说从一个库导出来的数据,到另一个库导入,或者插入数据,报失败(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错误,比如:
Hello,GBASE