dbaccess概述
數據庫產品通常會提供一個命令行客戶端工具。
? ? ? ? ? ? ? ? 數據庫廠商 ? ? ? ? ? ? ? ?? | ? ? ? ? ? ? ? ? ? ?命令行客戶端 ? ? ? ? ? ? ?? |
Oracle | sqlplus |
MySQL | mysql |
Marladb | mysql |
GBase 8s | dbaccess |
Kingbase ES | ksql |
DM8 | disql |
dbaccess 是 GBase 8s 數據庫的一個命令行客戶端工具,用來與 GBase 8s 數據庫服務器進行交互。
dbaccess 是 GBase 8s 數據庫自帶的工具,只要安裝了 GBase 8s 數據庫,就可以在命令行啟動該工具。
dbaccess 識別用戶輸入,將用戶輸入的 SQL 語句打包發送給 GBase 8s 數據庫服務器執行,并接收服務器的執行結果,并按用戶的要求將執行結果展示給用戶。
?
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
[gbasedbt@train ~]$ dbaccess - -
Your evaluation license will expire on 2022-06-09 00:00:00
> database gbasedb;Database selected.> drop table if exists t_user;Table dropped.> create table t_user(f_userid int, f_username varchar(50));Table created.> insert into t_user values(1, 'gbasedbt');1 row(s) inserted.> select * from t_user;f_userid f_username 1 gbasedbt 1 row(s) retrieved.>
非交互模式
管道模式
dbaccess可以接收STDIN中的內容,做為dbaccess需要執行的指令。
echo "sql_code" | dbaccess <db_name>
DEMO
[gbasedbt@train ~]$ echo "select * from t_user;" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_userid f_username 1 gbasedbt 1 row(s) retrieved.Database closed.[gbasedbt@train ~]$
腳本模式
可以將SQL代碼保存到文件中,將文件做為dbaccess的第二個參數,來執行文件中的SQL代碼。
dbaccess <db_name> <sql_file>
DEMO
[gbasedbt@train ~]$ cat demo.sql
database gbasedb;drop table if exists t_user;create table t_user(f_userid int, f_username varchar(50));insert into t_user values(1, 'sql_in_file');select * from t_user;[gbasedbt@train ~]$ dbaccess - demo.sql
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.Table dropped.Table created.1 row(s) inserted.f_userid f_username 1 sql_in_file 1 row(s) retrieved.Database closed.[gbasedbt@train ~]$
可以將SQL代碼直接寫在腳本文件中,采用如下方式,執行SQL代碼。
dbaccess <db_name> <<EOF
<sql_code>
EOF
DEMO
[gbasedbt@train ~]$ cat demo.sh
#!/bin/bashdbaccess <<EOF
database gbasedb;drop table if exists t_user;create table t_user(f_userid int, f_username varchar(50));insert into t_user values(1, 'shell');select * from t_user;EOF[gbasedbt@train ~]$ sh demo.sh
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.Table dropped.Table created.1 row(s) inserted.f_userid f_username 1 shell 1 row(s) retrieved.Database closed.[gbasedbt@train ~]$
dbaccess環境變量
DBFLTMASK
默認情況下,dbaccess會盡可能的顯示浮點數的小數位數。通過設置該環境變量,控制dbaccess在輸出小數信息時,盡量只顯示指定位數的小數。
export DBFLTMASK=3
DEMO
[gbasedbt@train ~]$ cat float.sql
database gbasedb;drop table if exists t_float;create table t_float(f_num float);insert into t_float values(1234567890.123456);
insert into t_float values(12345.6789);
[gbasedbt@train ~]$ unset DBFLTMASK
[gbasedbt@train ~]$ echo $DBFLTMASK[gbasedbt@train ~]$ echo "select * from t_float" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_num 1234567890.123
12345.678900002 row(s) retrieved.Database closed.[gbasedbt@train ~]$ export DBFLTMASK=3
[gbasedbt@train ~]$ echo "select * from t_float" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_num 1234567890.12312345.6792 row(s) retrieved.Database closed.[gbasedbt@train ~]$
DBEDIT
設置dbaccess中使用的操作系統文本編輯器,默認為vi。
export DBEDIT=vi
DBMONEY
GBase 8s中的money數據類型的顯示。默認情況下,會根據操作系統的本地化設置,顯示貨幣信息。可以通過該環境變量,設置需要顯示的信息。
export DBMONEY="[front][.|,][back]"
DEMO
[gbasedbt@train ~]$ cat money.sql
database gbasedb;drop table if exists t_money;
create table t_money(f_id int, f_num money);insert into t_money values(1, 123.456);
insert into t_money values(2, 123456.789);
insert into t_money values(3, 1234567890.123456789);[gbasedbt@train ~]$ dbaccess gbasedb money.sql
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.Database closed.Database selected.Elapsed time: 0.001 secTable dropped.Elapsed time: 0.004 secTable created.Elapsed time: 0.001 sec1 row(s) inserted.Elapsed time: 0.001 sec1 row(s) inserted.Elapsed time: 0.001 sec1 row(s) inserted.Elapsed time: 0.001 secDatabase closed.[gbasedbt@train ~]$ echo "select * from t_money" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_id f_num 1 RMB 123.462 RMB 123456.793 RMB 1234567890.123 row(s) retrieved.Elapsed time: 0.002 secDatabase closed.[gbasedbt@train ~]$ echo $LANG
en_US.UTF-8
[gbasedbt@train ~]$ export DBMONEY="$"
[gbasedbt@train ~]$ echo "select * from t_money" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_id f_num 1 $123.462 $123456.793 $1234567890.123 row(s) retrieved.Elapsed time: 0.005 secDatabase closed.[gbasedbt@train ~]$ export DBMONEY=".$"
[gbasedbt@train ~]$ echo "select * from t_money" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_id f_num 1 123.46$2 123456.79$3 1234567890.12$3 row(s) retrieved.Elapsed time: 0.002 secDatabase closed.[gbasedbt@train ~]$
GL_DATE
GBase 8s中的date數據類型,默認格式為月/日/年(英文),可以設置GL_DATE環境變量,改變DATE數據的顯示格式。
export GL_DATE="%iY-%m-%d"
DEMO
[gbasedbt@train ~]$ cat date.sql
database gbasedb;drop table if exists t_date;create table t_date(f_dt date);insert into t_date values('06/18/2021');select * from t_date;
[gbasedbt@train ~]$ unset GL_DATE
[gbasedbt@train ~]$ echo $GL_DATE[gbasedbt@train ~]$ dbaccess gbasedb date.sql
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.Database closed.Database selected.Elapsed time: 0.001 secTable dropped.Elapsed time: 0.001 secTable created.Elapsed time: 0.004 sec1205: Invalid month in date
Error in line 7
Near character position 38f_dt No rows found.Elapsed time: 0.001 secDatabase closed.[gbasedbt@train ~]$ echo $LANG
en_US.UTF-8
[gbasedbt@train ~]$ export GL_DATE="%m/%d/%iY"
[gbasedbt@train ~]$ echo "insert into t_date values('06/18/2021');" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.1 row(s) inserted.Elapsed time: 0.004 secDatabase closed.[gbasedbt@train ~]$ echo "select * from t_date" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_dt 06/18/20211 row(s) retrieved.Elapsed time: 0.005 secDatabase closed.[gbasedbt@train ~]$ export GL_DATE="%iY-%m-%d"
[gbasedbt@train ~]$ echo $GL_DATE
%iY-%m-%d
[gbasedbt@train ~]$ echo "select * from t_date" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_dt 2021-06-181 row(s) retrieved.Elapsed time: 0.002 secDatabase closed.[gbasedbt@train ~]$
DBACCESS_SHOW_TIME
控制dbaccess在執行SQL時,是否顯示SQL的執行時間。
export DBACCESS_SHOW_TIME=1
DEMO
[gbasedbt@train ~]$ unset DBACCESS_SHOW_TIME
[gbasedbt@train ~]$ echo $DBACCESS_SHOW_TIME[gbasedbt@train ~]$ echo "select * from t_float" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_num 1234567890.12312345.6792 row(s) retrieved.Database closed.[gbasedbt@train ~]$ export DBACCESS_SHOW_TIME=1
[gbasedbt@train ~]$ echo $DBACCESS_SHOW_TIME
1
[gbasedbt@train ~]$ echo "select * from t_float" | dbaccess gbasedb
Your evaluation license will expire on 2022-06-09 00:00:00Database selected.f_num 1234567890.12312345.6792 row(s) retrieved.Elapsed time: 0.001 secDatabase closed.[gbasedbt@train ~]$
附錄
日期格式化參數
格式化符 | 說明 |
---|---|
%a | 星期的短格式表示 |
%A | 星期的完整格式表示 |
%b | 月份的短格式表示 |
%B | 月份的完整格式表示 |
%C | 世紀的表示,通常是年值除以100后的整數部分 |
%d | 天(01-31) |
%D | 相當于格式:%m/%d/%y |
%e | 天(1-31) |
%h | 和%b相同 |
%H | 小時(00-24) |
%iy | 兩位年(00-99) |
%IY | 四位年(0000-9999) |
%m | 月(01-12) |
%M | 分鐘(00-59) |
%n | 換行符 |
%S | 秒(00-59) |
%t | 制表符 |
%w | 星期的數字表示(0-6) |
%y | 兩位年(00-99) |
%Y | 四位年(0000-9999) |