数据库产品通常会提供一个命令行客户端工具。
dbaccess 是 SinoDB 数据库的一个命令行客户端工具,用来与 SinoDB 数据库服务器进行交互。
dbaccess 是 SinoDB 数据库自带的工具,只要安装了 SinoDB 数据库,就可以在命令行启动该工具。
dbaccess 识别用户输入,将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。
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会尽可能的显示浮点数的小数位数。通过设置该环境变量,控制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 ~]$
设置dbaccess中使用的操作系统文本编辑器,默认为vi。
export DBEDIT=vi
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环境变量,改变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 ~]$
附录
日期格式化参数