SinoDB 客户端工具之dbaccess

dbaccess概述

数据库产品通常会提供一个命令行客户端工具。

dbaccess 是 SinoDB 数据库的一个命令行客户端工具,用来与 SinoDB 数据库服务器进行交互。
dbaccess 是 SinoDB 数据库自带的工具,只要安装了 SinoDB 数据库,就可以在命令行启动该工具。
dbaccess 识别用户输入,将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。

dbaccess工作模式

交互模式

菜单交互模式

dbaccess提供了一个基于控制台的菜单,用户可以使用方向键或快捷键,选择和执行相应的功能。
直接运行dbaccess命令,即可进入菜单的交互模式。
DEMO
-选择/连接数据库实例
-编辑/执行SQL代码
-选择/执行文件中的SQL代码
注: 可选择和执行的文件,在启动dbaccess目录中,且扩展名为.sql。

指令交互模式

dbaccess提供了一个类似mysql或sqlplus的客户端交互模式,用户输入要执行的指令并回车,dbaccess执行用户输入的指令,并返回执行结果。
可以通过为dbaccess提供两个参数,进入指令交互模式。

dbaccess <param1> <param2>

param1:提供数据库名称或-,当该参数为-时,表示未选择默认的数据库,后续可在dbaccess中,使用database <db_name>指定当前数据库。

param2:固定为-,表示dbaccess的输入为标准输入STDIN。

DEMO

[informix@vm84145 ~]$ dbaccess - -
> database testdb;       

Database selected.

> drop table if exists tuser;

Table dropped.

> create table tuser(cuserid int,cusername varchar(50));

Table created.

> insert into tuser values(1,'sinodb');

1 row(s) inserted.

> select * from tuser;

    cuserid cusername                                          

          1 sinodb                                            

1 row(s) retrieved.

> 

非交互模式

管道模式

dbaccess可以接收STDIN中的内容,做为dbaccess需要执行的指令。

echo "sql_code" | dbaccess <db_name>

DEMO

[informix@vm84145 ~]$ echo "select * from tuser;" | dbaccess testdb

Database selected.

    cuserid cusername                                          

          1 sinodb                                            

1 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ 

脚本模式

dbaccess <db_name> <sql_file>

DEMO

[informix@vm84145 ~]$ cat demo.sql
database testdb;

drop table if exists tuser;

create table tuser(cuserid int, cusername varchar(50));

insert into tuser values(1, 'sinodb');

select * from tuser;


[informix@vm84145 ~]$ dbaccess - demo.sql

Database selected.


Table dropped.


Table created.


1 row(s) inserted.



    cuserid cusername                                          

          1 sinodb                                            

1 row(s) retrieved.


Database closed.

[informix@vm84145 ~]$ 

可以将SQL代码直接写在脚本文件中,采用如下方式,执行SQL代码。

dbaccess <db_name> <<EOF
<sql_code>
EOF

DEMO

[informix@vm84145 ~]$ cat demo.sh
#!/bin/bash
dbaccess <<EOF
database testdb;

drop table if exists tuser;

create table tuser(cuserid int, cusername varchar(50));

insert into tuser values(1, 'sinodb');

select * from tuser;

EOF

[informix@vm84145 ~]$ sh demo.sh

Database selected.


Table dropped.


Table created.


1 row(s) inserted.



    cuserid cusername                                          

          1 sinodb                                            

1 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ 

dbaccess环境变量

DBFLTMASK

默认情况下,dbaccess会尽可能的显示浮点数的小数位数。通过设置该环境变量,控制dbaccess在输出小数信息时,尽量只显示指定位数的小数。

export DBFLTMASK=3

DEMO

[informix@vm84145 ~]$ cat float.sql 
database testdb;

drop table if exists tfloat;

create table tfloat(cnum float);

insert into tfloat values(1234567890.123456);
insert into tfloat values(12345.6789);


[informix@vm84145 ~]$ unset DBFLTMASK
[informix@vm84145 ~]$ echo $DBFLTMASK

[informix@vm84145 ~]$ dbaccess - float.sql

Database selected.


Table dropped.


Table created.


1 row(s) inserted.


1 row(s) inserted.


Database closed.

[informix@vm84145 ~]$ echo "select * from float" | dbaccess testdb

Database selected.


[informix@vm84145 ~]$ echo "select * from tfloat" | dbaccess testdb

Database selected.



          cnum 

1234567890.123
12345.67890000

2 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ export DBFLTMASK=3
[informix@vm84145 ~]$ echo "select * from tfloat" | dbaccess testdb

Database selected.



          cnum 

1234567890.123
     12345.679

2 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ 

DBEDIT

设置dbaccess中使用的操作系统文本编辑器,默认为vi。

export DBEDIT=vi

DBMONEY

SinoDB中的money数据类型的显示。默认情况下,会根据操作系统的本地化设置,显示货币信息。可以通过该环境变量,设置需要显示的信息。

export DBMONEY="[front][.|,][back]"

DEMO

[informix@vm84145 ~]$ cat money.sql
database testdb;

drop table if exists tmoney;
create table tmoney(cid int, cnum money);

insert into tmoney values(1, 123.456);
insert into tmoney values(2, 123456.789);
insert into tmoney values(3, 1234567890.123456789);
[informix@vm84145 ~]$ dbaccess testdb money.sql 

Database selected.


Database closed.


Database selected.


Table dropped.


Table created.


1 row(s) inserted.


1 row(s) inserted.


1 row(s) inserted.


Database closed.

[informix@vm84145 ~]$ echo "select * from tmoney" |dbaccess testdb

Database selected.



        cid                cnum 

          1          RMB 123.46
          2       RMB 123456.79
          3   RMB 1234567890.12

3 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ echo $LANG
en_US.UTF-8
[informix@vm84145 ~]$ export DBMONEY="$"
[informix@vm84145 ~]$ echo "select * from tmoney" |dbaccess testdb

Database selected.



        cid             cnum 

          1          $123.46
          2       $123456.79
          3   $1234567890.12

3 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ export DBMONEY=".$"
[informix@vm84145 ~]$ echo "select * from tmoney" |dbaccess testdb

Database selected.



        cid             cnum 

          1          123.46$
          2       123456.79$
          3   1234567890.12$

3 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ 

GL_DATE

可以通过设置GL_DATE环境变量,改变DATE数据的显示格式。

export GL_DATE="%iY-%m-%d"

DEMO

[informix@vm84145 ~]$ cat date.sql 

database testdb;

drop table if exists tdate;

create table tdate(cdate date);

insert into tdate values('2022/02/15');

select * from tdate;

[informix@vm84145 ~]$ unset GL_DATE
[informix@vm84145 ~]$ echo $GL_DATE

[informix@vm84145 ~]$ dbaccess testdb date.sql

Database selected.


Database closed.


Database selected.


Table dropped.


Table created.


1 row(s) inserted.



cdate            

2022 02月 15日

1 row(s) retrieved.


Database closed.

[informix@vm84145 ~]$ echo $LANG
en_US.UTF-8
[informix@vm84145 ~]$ export GL_DATE="%m/%d/%iY"
[informix@vm84145 ~]$ echo "select * from tdate;" | dbaccess testdb

Database selected.



cdate      

02/15/2022

1 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ export GL_DATE="%iY-%m-%d"
[informix@vm84145 ~]$ echo $GL_DATE
%iY-%m-%d
[informix@vm84145 ~]$ echo "select * from tdate;" | dbaccess testdb

Database selected.



cdate      

2022-02-15

1 row(s) retrieved.



Database closed.

[informix@vm84145 ~]$ 

附录
日期格式化参数