在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
SQLCli 快速说明SQLCli 是一个主要用Python完成的,命令快速的测试工具。 程序可以通过JPype连接数据库的JDBC驱动。 SQLCli 目前可以支持的数据库有:
SQLCli 目前支持的数据类型有: CHAR ====> str VARCHAR ====> str LONGVARCHAR ====> str TIMESTAMP_WITH_TIMEZONE ====> datetime.datetime TIMESTAMP ====> datetime.datetime TIME ====> datetime.time DATE ====> datetime.date BINARY ====> bytearray VARBINARY ====> bytearray LONGVARBINARY ====> bytearray DECIMAL ====> decimal.Decimal NUMERIC ====> decimal.Decimal DOUBLE ====> decimal.Decimal REAL ====> decimal.Decimal FLOAT ====> float TINYINT ====> int INTEGER ====> int SMALLINT ====> int INTEGER ====> int BOOLEAN ====> bool BFILE ====> str "bfilename(dirpath:filename)" BIGINT ====> decimal.Decimal BIT ====> decimal.Decimal STRUCT ====> tuple() ARRAY ====> list() CLOB ====> SQLCliLargeObject.getData() ==> str BLOB ====> SQLCliLargeObject.getData() ==> bytearray 谁需要使用这个工具需要通过SQL语句来查看、维护数据库的。 为什么要设计这个工具这个工具的存在目的不是为了替代各种数据库的命令行工具,如Oracle的SQLPlus,MYSQL的mysql等 安装安装的前提有:
依赖的第三方安装包:
对于Windows,由于confluent_kafka目前不支持Windows,所以无需安装,也不能使用该功能 利用PIP来安装: pip install -U robotslacker-sqlcli 安装后步骤-下载驱动程序:
安装后步骤-根据需要修改sqlcli/conf/sqlcli.ini文件:
第一次使用安装后直接在命令下执行sqlcli命令即可。 (base) >sqlcliSQL*Cli Release 0.0.32SQL> 如果你这里看到了版本信息,那祝贺你,你的程序安装成功了 (base) >sqlcliSQL*Cli Release 0.0.32SQL> connect mem;SQL> Connected. 如果你下载了至少H2的驱动程序,执行这个命令将连接到内置的H2数据库中,如果你看到了Connected信息,那再一次祝贺你,你的程序基本工作正常。 驱动程序的下载和配置sqlcli是一个基于JDBC/ODBC的数据库工具,基于JDBC操作数据库的前提当前环境下有对应的数据库连接jar包,基于ODBC前提是安装了相关的ODBC驱动。 驱动程序的配置配置文件位于SQLCli的安装目录下的conf目录中,配置文件名为:sqlcli.conf [driver]oracle=oracle_drivermysql=mysql_driver.... [oracle_driver]filename=ojdbc8.jardownloadurl=http://xxxxxx/driver/ojdbc8.jarmd5=1aa96cecf04433bc929fca57e417fd06driver=oracle.jdbc.driver.OracleDriverjdbcurl=jdbc:oracle:thin:@${host}:${port}/${service}[mysql_driver]filename=mysql-connector-java-8.0.20.jardownloadurl=http://xxxxx/driver/mysql-connector-java-8.0.20.jarmd5=48d69b9a82cbe275af9e45cb80f6b15fdriver=com.mysql.cj.jdbc.Driverjdbcurl=jdbc:mysql://${host}:${port}/${service}jdbcprop=socket_timeout:360000000odbcurl=DRIVER={driver_name};SERVER=${host};PORT=${port};DATABASE=${service};UID=${username};PWD=${password}; 如果数据库要新增其他数据库的连接,则应仿效上述配置例子。
[driver]oracle=oracle_drivermysql=mysql_driver[oracle_driver]filename=ojdbc8.jardriver=oracle.jdbc.driver.OracleDriverjdbcurl=jdbc:oracle:thin:@${host}:${port}/${service}[mysql_driver]filename=mysql-connector-java-8.0.20.jardriver=com.mysql.cj.jdbc.Driverjdbcurl=jdbc:mysql://${host}:${port}/${service} 驱动程序的下载基于上述参数文件的正确配置,可以使用--syncdriver的方式从服务器上来更新数据库连接需要的jar包 (base) C:\Work\linkoop\sqlcli>sqlcli --syncdriverChecking driver [oracle] ...File=[ojdbc8.jar], MD5=[1aa96cecf04433bc929fca57e417fd06]Driver [oracle_driver] is up-to-date.Checking driver [mysql] ...File=[mysql-connector-java-8.0.20.jar], MD5=[48d69b9a82cbe275af9e45cb80f6b15f]Driver [mysql_driver] is up-to-date. 程序的命令行参数(base) sqlcli --helpUsage: sqlcli [OPTIONS]Options: --version Output sqlcli's version. --logon TEXT logon user name and password. user/pass --logfile TEXT Log every query and its results to a file. --execute TEXT Execute SQL script. --nologo Execute with silent mode. --sqlperf TEXT SQL performance Log. --syncdriver Download jdbc jar from file server. --clientcharset TEXT Set client charset. Default is UTF-8. --resultcharset TEXT Set result charset. Default is same to clientcharset. --help Show this message and exit. --version 用来显示当前工具的版本号 (base) sqlcli --versionVersion: 0.0.32 --logon 用来输入连接数据的的用户名和口令 (base) sqlcli --logon user/passVersion: 0.0.32Driver loaded.Database connected.SQL>如果用户、口令正确,且相关环境配置正常,你应该看到如上信息。user/pass : 数据库连接的用户名和口令 成功执行这个命令的前提是你已经在环境变量中设置了数据库连接的必要信息。 这里的必要信息包括:环境变量: SQLCLI_CONNECTION_URL 参数格式: jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名] --logfile 用来记录本次命令行操作的所有过程信息 (base) sqlcli --logon user/pass --logfile test.logVersion: 0.0.32Driver loaded.Database connected.set echo onselect * from test_tab;+----+----------+| ID | COL2 |+----+----------+| 1 | XYXYXYXY || 1 | XYXYXYXY |+----+----------+SQL> exitDisconnected.(base) type test.logDriver loaded.Database connected.SQL> select * from test_tab;+----+----------+| ID | COL2 |+----+----------+| 1 | XYXYXYXY || 1 | XYXYXYXY |+----+----------+2 rows selected.SQL> exitDisconnected. --execute 在SQLCli启动后执行特定的SQL脚本 (base) type test.sqlselect * from test_tab;(base) sqlcli --logon user/pass --execute test.sqlVersion: 0.0.32Driver loaded.Database connected.set echo onselect * from test_tab;+----+----------+| ID | COL2 |+----+----------+| 1 | XYXYXYXY || 1 | XYXYXYXY |+----+----------+SQL> exitDisconnected.注意: 即使你的SQL脚本中不包含Exit语句,在sqlcli执行完当前脚本后,他也会自动执行exit语句如果SQL脚本中不包含数据库驱动加载或者数据库连接语句,请在执行这个命令前设置好相应的环境变量信息 --nologo 这是一个选项,用来控制sqlcli是否会在连接的时候显示当前的程序版本 (base) sqlcli SQL*Cli Release 0.0.32SQL> 区别:(base) sqlcli --nologoSQL> --sqlperf 输出SQL运行日志 Script Started elapsed SQLPrefix SQLStatus ErrorMessage Scenariosub_1.sql 2020-05-25 17:46:23 0.00 loaddriver localtest\linkoopdb-jdbc-2.3. 0 Scenario1sub_1.sql 2020-05-25 17:46:23 0.28 connect admin/123456 0 Scenario1sub_1.sql 2020-05-25 17:46:24 0.00 SET ECHO ON 0 Scenario1sub_1.sql 2020-05-25 17:46:24 0.00 SET TIMING ON 0 Scenario2sub_1.sql 2020-05-25 17:46:24 0.01 LOADSQLMAP stresstest 0 Scenario2sub_1.sql 2020-05-25 17:46:24 0.92 ANALYZE TRUNCATE STATISTICS 0 Scenario3sub_1.sql 2020-05-25 17:46:25 0.02 SELECT count(SESSION_ID) FROM INFORMATI 0 Scenario3sub_1.sql 2020-05-25 17:46:25 1.37 drop user testuser if exists cascade 0 Scenario3sub_1.sql 2020-05-25 17:46:26 0.54 CREATE USER testuser PASSWORD 123456 0 Scenario3 在SQLCli里面查看当前支持的命令(base) sqlcli SQL*Cli Release 0.0.32SQL> help+--------------+-----------------------------------------------------+| Command | Description |+--------------+-----------------------------------------------------+| __internal__ | 执行内部操作命令: || __internal__ | __internal__ hdfs HDFS文件操作 || __internal__ | __internal__ kafka kafka队列操作 || __internal__ | __internal__ data 随机测试数据管理 || __internal__ | __internal__ test 测试管理 || __internal__ | __internal__ job 后台并发测试任务管理 || __internal__ | __internal__ transaction 后台并发测试事务管理 || connect | 连接到指定的数据库 || disconnect | 断开数据库连接 || echo | 回显输入到指定的文件 || exit | 正常退出当前应用程序 || help | Show this help. || host | 执行操作系统命令 || loaddriver | 加载数据库驱动文件 || loadsqlmap | 加载SQL映射文件 || quit | Quit. || session | 数据库连接会话管理 || set | 设置运行时选项 || sleep | 程序休眠(单位是秒) || spool | 将输出打印到指定文件 || start | 执行指定的测试脚本 |+--------------+-----------------------------------------------------+这里显示的是所有除了标准SQL语句外,可以被执行的各种命令开头。标准的SQL语句并没有在这里显示出来,你可以直接在控制行内或者脚本里头执行SQL脚本。 连接数据库在sqlcli命令行里头,可以通过connect命令来连接到具体的数据库 (base) sqlcli SQL*Cli Release 0.0.32SQL> connect user/pass@jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名] Database connected.SQL> 能够成功执行connect的前提是: 数据库驱动已经放置到jlib下,并且在conf中正确配置如果已经在环境变量中指定了SQLCLI_CONNECTION_URL,连接可以简化为(base) sqlcli SQL*Cli Release 0.0.32SQL> connect user/passDatabase connected.SQL> 在数据库第一次连接后,第二次以及以后的连接可以不再输入连接字符串,程序会默认使用上一次已经使用过的连接字符串信息,比如:(base) sqlcli SQL*Cli Release 0.0.32SQL> connect user/pass@jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名] Database connected.SQL> connect user2/pass2Database connected.SQL> 常见数据库的连接方式示例:H2: connnet memORACLE: connect username/password@jdbc:oracle:tcp://IP:Port/Service_NameMYSQL: connect username/password@jdbc:mysql:tcp://IP:Port/Service_NamePostgreSQL: connect username/password@jdbc:postgresql:tcp://IP:Port/Service_NameSQLServer: connect username/password@jdbc:sqlserver:tcp://IP:Port/DatabaseNameTeraData: connect username/password@jdbc:teradata:tcp://IP/DatabaseNameHive: connect hive/hive@jdbc:hive2://IP:Port/DatabaseNameClickHouse: connect default/""@jdbc:clickhouse:tcp://IP:Port/DatabaseNameLinkoopDB: connect username/password@jdbc:linkoopdb:tcp://IP:Port/Service_Name 断开数据库连接(base) sqlcli SQL*Cli Release 0.0.32SQL> connect user/pass@jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名] Database connected.SQL> disconnectDatabase disconnected. 会话的切换和保存(base) sqlcli SQL*Cli Release 0.0.32SQL> connect user/pass@jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名] Database connected.SQL> session save sesssion1Session saved.# 这里会把当前会话信息保存到名字为session1的上下文中,session1为用户自定义的名字# 注意:这里并不会断开程序的Session1连接,当Restore的时候也不会重新连接SQL> connect user/pass@jdbc:[数据库类型]:[数据库通讯协议]://[数据库主机地址]:[数据库端口号]/[数据库服务名]Database connected.# 连接到第一个会话SQL> session save sesssion2Session saved.# 这里会把当前会话信息保存到名字为session2的上下文中,session2为用户自定义的名字# 注意:这里并不会断开程序的Session2连接,当Restore的时候也不会重新连接SQL> session show+---------------+-----------+-----------------------------------------------+| Sesssion Name | User Name | URL |+---------------+-----------+-----------------------------------------------+| session1 | xxxxx | jdbc:xxxxx:xxx://xxx.xxx.xxx.xxx/xxxx || session2 | yyyyy | jdbc:yyyy:xxx://xxx.xxx.xxx.xxx/yyyyy | +---------------+-----------+-----------------------------------------------+# 显示当前保存的所有会话信息SQL> session restore sesssion1Session stored.# 这里将恢复当前数据库连接为之前的会话1SQL> session restore sesssion2Session stored.# 这里将恢复当前数据库连接为之前的会话2SQL> session saveurl sesssion3Session saved.# 这里会把当前会话信息的URL保存到名字为session3的上下文中,session3为用户自定义的名字# 注意:这里并不会保持程序的Session3连接,仅仅记录了URL信息,当Restore的时候程序会自动重新连接SQL> session release sesssion3Session released.# 这里将释放之前保存的数据库连接,和针对具体一个连接的DisConnect类似 从脚本中执行SQL语句我们可以把语句保存在一个SQL文件中,并通过执行SQL文件的方式来执行具体的SQL start [script1.sql] [script2.sql] .... [loop $nlooptime] 例如: (base) sqlcli SQL*Cli Release 0.0.32SQL> start aa.sqlSQL> ....SQL> disconnect这里将执行aa.sql如果有多个文件,可以依次填写,如SQL> start aa.sql bb.sql ....(base) sqlcli SQL*Cli Release 0.0.32SQL> start aa.sql loop 10SQL> ....SQL> disconnect这里将执行aa.sql共计10次如果有多个文件,可以依次填写,如SQL> start aa.sql bb.sql .... loop 10 让程序休息一会(base) sqlcli SQL*Cli Release 0.0.32SQL> sleep 10SQL> disconnectDatabase disconnected.这里的10指的是10秒,通过这个命令可以让程序暂停10秒钟。Sleep的做法主要用在一些定期循环反复脚本的执行上 执行主机的操作命令(base) sqlcli SQL*Cli Release 0.0.32SQL> host date2020年 10月 29日 星期四 11:24:34 CSTSQL> disconnectDatabase disconnected.这里的date是主机的命令,需要注意的是:在Windows和Linux上命令的不同,脚本可能因此无法跨平台执行 回显指定的文件(base) sqlcli SQL*Cli Release 0.0.32SQL> echo subtest.sql-- 这里是subtest.sqlconnect admin/123456select * from catSQL> echo off这里从echo开始,到echo off结束的中间内容并不会被数据库执行,而且会记录在subtest.sql中同样的操作,这里也可以用来生成一些简单的配置文件,简单的报告信息等 加载数据库驱动SQLCli会默认加载所有配置在conf/sqlcli.ini中的JDBC驱动 (base) sqlcli SQL*Cli Release 0.0.32SQL> loaddriver;没有任何参数的loaddriver命令将显示出所有系统已经加载的驱动程序SQL> loaddriver [database_name] [jdbc_jarfile]将用参数中jdbc_jarfile指定的文件替换掉配置文件中的文件信息 加载SQL重写配置文件在sqlcli命令行里头,可以通过loadsqlmap命令来加载SQL重写配置文件 (base) sqlcli SQL*Cli Release 0.0.31SQL> loadsqlmap map1Mapping file loaded.这里的map1表示一个重写配置文件,这里可以写多个配置文件的名字,比如loadsqlmap map1,map2,map3,多个文件名之间用逗号分隔重写文件的查找顺序: 1. 以map1为例子,如果map1是一个全路径或者基于当前目录的相对目录,则以全路径或相对目录为准。这时候参数应该带有后缀 2: 如果依据全路径没有找到,则会尝试在脚本所在的目录进行相对目录的查找。这时候参数不能够带后缀,查找的后缀文件名是.map 同时存在多个配置的情况下,配置会被叠加启用SQL重写的方法: 1. 在命令行里面,通过sqlcli --sqlmap map1的方式来执行重写文件的位置 2. 定义在系统环境变量SQLCLI_SQLMAPPING中指定。 如果定义了命令行参数,则系统环境变量不生效 3. 通过在SQL输入窗口,输入loadsqlmap的方式来指定重写文件的写法要求: 以下是一个重写文件的典型格式, 1,2,3,4,5 是文件的行号,不是真实内容: 1 #..*: 2 ((?i)CREATE TABLE .*\))=>\1 engine xxxxx 3 WEBURL=>{ENV(ROOTURL)} 4 MYID=>{RANDOM('random_ascii_letters_and_digits',10)} 5 #. 行1: 这里定义的是参与匹配的文件名,以#.开头,以:结束,如果需要匹配全部文件,则可以在中间用.*来表示 行2: 这里定义的是一个正则替换规则, 在符合CREATE TABLE的语句后面增加engine xxxxx字样 行3: 这里定义的是一个正则替换规则, 用环境变量ROOTURL的值来替换文件中WEBURL字样 行4: 这里定义的是一个正则替换规则, 用一个最大长度位10,可能包含字母和数字的内容来替换文件中的MYID字样 行5: 文件定义终止符 每一个MAP文件里,可以循环反复多个这样的类似配置,每一个配置段都会生效重写SQL的日志显示: 被重写后的SQL在日志中有明确的标志信息,比如: SQL> CREATE TABLE T_TEST( > id int, > name varchar(30), > salary int > ); REWROTED SQL> Your SQL has been changed to: REWROTED > CREATE TABLE T_TEST( REWROTED > id int, REWROTED > name varchar(30), REWROTED > salary int REWROTED > ) engine xxxx; 这里第一段是SQL文件中的原信息,带有REWROTED的信息是被改写后的信息 执行数据库SQL语句在数据库连接成功后,我们就可以执行我们需要的SQL语句了,对于不同的SQL语句我们有不同的语法格式要求。
CREATE | REPLACE ****** FUNCTION|PROCEDURE **** | DECLARE **** 这里并没有完整描述,具体的信息可以从代码文件中查阅 执行SQL语句块SQL语句块的结束符为【/】,且【/】必须出现在具体一行语句的开头 比如: SQL> CREATE PROCEDURE PROC_TEST() > BEGIN > bulabulabula....; > END; > / SQL> 对于SQL语句块,SQLCli将被等待语句结束符后把全部的SQL一起送给SQL引擎(不包括语句结束符)。
CREATE | SELECT | UPDATE | DELETE | INSERT | __INTERNAL__ | DROP | REPLACE | ALTER 执行多行SQL语句多行SQL结束符为分号【 ;】 比如: SQL> CREATE TABLE TEST_TAB > ( > ID CHAR(20), > COL1 CHAR(20) > ); SQL> 对于多行SQL语句,同样也可以使用行首的【/】作为多行语句的结束符 对于SQL多行语句,SQLCli将被等待语句结束符后把全部的SQL一起送给SQL引擎(包括可能的语句结束符分号)。 其他SQL语句
SQL语句中的注释
SQL> CREATE TABLE TEST_TAB > ( > ID CHAR(20), -- ID信息,这是是一个行注释 > COL1 CHAR(20) -- 第一个CHAR字段,这也是一个行注释 > /* 这个表是做测试用的,有两个字段: > ID和COL > 这上下的4行内容都是段落注释 > */ > ); SQL> 设置程序的运行选项通过SET命令,我们可以改变SQLCli的一些行为或者显示选项。 SQL> set Current set options: +--------------------+----------------------+----------------------+ | Name | Value | Comments | +--------------------+----------------------+----------------------+ | WHENEVER_SQLERROR | CONTINUE | | | PAGE | OFF | | | ECHO | ON | | | TIMING | OFF | | | TIME | OFF | | | OUTPUT_FORMAT | LEGACY | TAB|CSV|LEGACY | | CSV_HEADER | OFF | ON|OFF | | CSV_DELIMITER | , | | | CSV_QUOTECHAR | | | | FEEDBACK | ON | ON|OFF | | TERMOUT | ON | ON|OFF | | ARRAYSIZE | 10000 | | | SQLREWRITE | OFF | ON|OFF | | LOB_LENGTH | 20 | | | FLOAT_FORMAT | %.7g | | | DECIMAL_FORMAT | | | | DATE_FORMAT | %Y-%m-%d | | | DATETIME_FORMAT | %Y-%m-%d %H:%M:%S %f | | | TIME_FORMAT | %H:%M:%S %f | | | CONN_RETRY_TIMES | 1 | Connect retry times. | | OUTPUT_PREFIX | | Output Prefix | | SQL_EXECUTE | PREPARE | DIRECT|PREPARE | | JOBMANAGER | OFF | ON|OFF | | JOBMANAGER_METAURL | | | | SCRIPT_TIMEOUT | -1 | | | SQL_TIMEOUT | -1 | | +--------------------+----------------------+----------------------+ 没有任何参数的set将会列出程序所有的配置情况。 控制参数解释-ECHO 主要的控制参数解释: SQL> set ECHO ON # 在LOG中将会回显SQL语句 SQL> set ECHO OFF # 在LOG中不会回显SQL语句 例如:执行SELECT 3 + 5 COL1 FROM DUAL, 在ECHO打开下,log文件内容如下: SQL> SELECT 3 + 5 COL1 FROM DUAL; SQL> =========== SQL> = COL1 === SQL> =========== SQL> 8 SQL> 1 rows selected. 在ECHO关闭下,log文件内容如下: SQL> =========== SQL> = COL1 === SQL> =========== SQL> 8 SQL> 1 rows selected. 控制参数解释-WHENEVER_SQLERROR 2. WHENEVER_SQLERROR SQL错误终端表示, 用来控制在执行SQL过程中遇到SQL错误,是否继续。 默认是CONTINUE,即继续。 CONTINUE | 遇到SQL语句错误继续执行 EXIT | 遇到SQL语句错误直接退出SQLCli程序 控制参数解释-PAGE3. PAGE 是否分页显示,当执行的SQL语句结果超过了屏幕显示的内容,是否会暂停显示,等待用户输入任意键后继续显示下一页,默认是OFF,即不中断。 控制参数解释-OUTPUT_FORMAT4. OUTPUT_FORMAT 显示格式, 默认是ASCII(会择机变化成TAB) 目前支持的选项有: LEGACY | 显示格式为表格的格式(第三方工具提供,暂时保留,来作为兼容性) CSV | 显示格式为CSV文件的格式 TAB | 显示格式为表格的格式 以下是一个例子: SQL> set output_format legacy SQL> select * from test_tab; +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+ 2 rows selected. SQL> set output_format csv SQL> select * from test_tab; "ID","COL2" "1","XYXYXYXY" "1","XYXYXYXY" 2 rows selected. SQL> 控制参数解释-LOB_LENGTH 5. LOB_LENGTH 控制LOB字段的输出长度,默认是20 SQL> set LOB_LENGTH 300 # CLOB将会显示前300个字符 例子,执行一个CLOB字段查询,CLOB中的信息为ABCDEFGHIJKLMNOPQRSTUVWXYZ SQL> set LOB_LENGTH 5 SQL> SELECT CLOB1 FROM TEST_TAB; SQL> =========== SQL> = CLOB1 == SQL> =========== SQL> ABCDE SQL> 1 rows selected. SQL> set LOB_LENGTH 15 SQL> ===================== SQL> = CLOB1 = SQL> ===================== SQL> ABCDEFGHIJKLMNO... SQL> 1 rows selected. 控制参数解释-FEEDBACK6. FEEDBACK 控制是否回显执行影响的行数,默认是ON,显示 SQL> set feedback on SQL> select * from test_tab; +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+ 2 rows selected. SQL> set feedback off SQL> select * from test_tab; +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+ 控制参数解释-TERMOUT7. TERMOUT 控制是否显示SQL查询的返回,默认是ON,显示 SQL> set termout on SQL> select * from test_tab; +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+ 2 rows selected. SQL> set termout off SQL> select * from test_tab; 2 rows selected. 控制参数解释-FLOAT_FORMAT/DECIMAL_FORMAT/DATE_FORMAT/DATETIME_FORMAT/TIME_FORMAT8. FLOAT_FORMAT 控制浮点数字的显示格式,默认是%.7g SQL> select abs(1.234567891234) from dual; +----------+ | C1 | +----------+ | 1.234568 | +----------+ 1 row selected. SQL> set FLOAT_FORMAT %0.10g SQL> select abs(1.234567891234) from dual; |
请发表评论