主要功能详解

数据库登录

isql通过第三章所述参数指定数据库登录参数。常用数据库登录参数如下:

  • -U 指定登录用户名,不指定时默认为sysdba,可以-Usysdba/szoscar55的格式连带输入密码;
  • -d 指定登录数据库,不指定时默认为osrdb;
  • -p 指定要登录的数据库所监听的端口号,不指定时默认为2003;

一个登录用例如下:isql -Usysdba/szoscar55 -d osrdb -p 2003。

注解

isql在v2.0.54(不含)版本后,isql新增连接超时机制,60秒内无法连接数据库将会退出连接。如果用户要自定义设置连接超时时间,可通过isql -C参数进行设置。

注解

登录数据库时,可以不指定登陆用户名和密码,可以使用STUSER、STPASSWORD环境变量指定登录的用户和密码,也可以使用密码文件(v2.0.61版本后支持),优先级为: -U选项 > 环境变量 > 密码文件

注解

isql在v2.0.64(不含)版本后,isql在登录数据库成功后,若isql与数据库断开了连接,不再进行重连操作,用户需要使用conn命令重新连接数据库。

使用密码文件登录数据库

isql在v2.0.61(不含)版本后,isql支持密码文件登录,密码文件路径可以为STPASSFILE环境变量路径,也可以为神通数据库安装目录下admin目录当中,文件名称为 stpass.conf(linux环境为.stpass)

获取密码文件的路径优先级为: 环境变量 > 神通数据库安装目录下的admin目录

例如我们使用的登录用例为: isql -Usysdba -d osrdb -p 2003

密码文件中的用户信息内容应该为: 127.0.0.1:2003:osrdb:sysdba:szoscar55,格式为host:port:database:user:password

我们需要注意的地方有:

  • 格式错误或者用户信息缺少都会导致查找失败
  • 一行对应一个用户的信息,不能将多个用户的信息放在一行上。

注解

不指定-U选项,默认使用"SYSDBA"进行查找。

不指定-d选项,默认"OSRDB"进行查找。

不指定-p选项,默认2003进行查找。

不指定-h选项,默认127.0.0.1进行查找。

用户信息中的数据库名,用户名需要区分大小写,如果指定的数据库名为osrdb,那么用户信息的数据库名应该为osrdb。

使用安全连接登录数据库

isql通过第三章所述参数指定数据库登录参数。安全连接登录数据库使用参数如下:

  • -z 指定使用安全连接登录数据库;
  • -K 指定isql.key的密码;

一个登录用例如下:isql -Usysdba/szoscar55 -d osrdb -p 2003 -z -K 123456。

证书准备:用户可使用DBA管理工具中的CA证书生成工具来生成isql所用的证书(证书具体生成流程参见:安全登录操作流程),其中用户名需为-U参数指定的用户名,-K参数指定生成证书时的密钥密码。成功生成证书后,证书以-U指定的用户名为命名前缀,如sysdba.crt,sysdba.key,为防止命名冲突,用户需将crt和key文件重命名为isql.crt和isql.key,并复制到神通数据库安装目录下admin目录当中。如果有双向验证的需求,需将根证书与证书吊销列表文件更名为isql-ca.crt和isql-ca.crl,并拷贝至同一目录下。

isql所连接的数据库需开启安全连接支持,如果isql建立安全连接失败,会自动尝试普通连接,成功连接数据库时,用户可以通过isql的终端窗口查看对应的安全连接状态

注解

isql在v2.0.50(不含)版本后,使用isql进行ssl连接时,需要在isql可执行目录下存在libssl.so.3和libcrypto.so.3文件,否则将无法使用

注解

在ssl连接时,分为ssl单向认证和ssl双向认证两种认证方式。

在单向认证下,客户端仅需要对服务端发送的证书及私钥进行单向验证,isql需要有对应isql.key,isql.crt文件。如果设置-y参数则该参数无效。

在双向认证下,客户端在单向验证的基础下,服务端和客户端都需要验证对应的根证书与证书吊销列表文件(isql-ca.crt和isql-ca.crl),此时用户可以通过-y参数去设置对应的加密算法。

如果没有对应的根证书与证书吊销列表文件(isql-ca.crt和isql-ca.crl),isql则进行单向认证。

NTLS安全通信

isql使用NTLS协议进行连接时,需要CA证书、签名及加密证书、签名及加密密钥文件

使用步骤

1.配置对应证书到神通数据库安装目录下admin目录当中,需要更名为ca_double.crt,client_enc.crt,client_enc.key,client_sign.crt,client_sign.key

ca_double.crt:CA证书

client_sign.crt:客户端签名证书

client_enc.crt:客户端加密证书

client_sign.key:客户端签名密钥

client_sign.crt:客户端加密密钥

2.连接参数配置: -Z

一个登录用例如下:isql -Usysdba/szoscar55 -d osrdb -p 2003 -Z

注解

isql在v2.0.50(不含)版本后支持该功能,使用isql进行ntls连接时,需要在isql可执行目录下存在libsslbaba.so.3和libcryptobaba.so.3文件,否则将无法使用

切换用户(connect命令)

Isql以指定用户连接数据库后,可在交互界面切换用户(需为已连接的数据库存在的用户),connect命令可以简写成conn。切换方式为“connect username”或“connect username/password”,如图所示。

../../../../_images/image155.png

“\c username”或“\c username/password”命令效果与connect相同。

注解

isql使用SSL协议或NTLS协议连接数据库后,不能使用conn命令进行用户切换

注解

针对connect命令的密码规则如下:

1.默认

用户名和密码之间用/间隔,如果用户名和密码中包含'/'字符或其他特殊字符(不可见字符),则需要使用双引号或者单引号括起来

2.单引号规则

用户名或密码在单引号中的,都会作为一个整体,可以包含任何可见和不可见字符。比如密码中有/字符,连接时可写成:

conn u1/'abc/123' --密码为abc/123

conn u1/'abc 123' --密码为abc 123

conn u1/'abc\t123' --密码为abc\t123

如果密码中有单引号,则需要使用两个单引号进行转义:

conn u1/'abc''123' --密码为abc'123

如果密码中有双引号,则不需要转义

conn u1/'abc"123' --密码为abc"123

3.双引号规则

用户名或密码在双引号中的,都会作为一个整体,可以包含任何可见和不可见字符。比如密码中有'/'字符,连接时可写成:

conn u1/"abc/123" --密码为abc/123

conn u1/"abc 123" --密码为abc 123

conn u1/"abc\t123" --密码为abc\t123

如果密码中有双引号,则需要使用两个双引号进行转义:

conn u1/"abc""123" --密码为abc"123

如果密码中有单引号,则不需要转义

conn u1/"abc'123" --密码为abc'123

4.分号规则

conn命令,命令最后是分号,分号会被忽略;如果密码中有分号,需要用单引号或者双引号引起来,比如:

conn u1/abc; --密码为abc

conn u1/abc ; --密码为abc

conn u1/abc;; --密码为abc;

conn u1/abc;;; --密码为abc;;

conn u1/"abc;;" --密码为abc;;

conn u1/"abc;;"; --密码为abc;;

conn u1/"abc;;" ; --密码为abc;;

conn u1/'abc;;' --密码为abc;;

conn u1/'abc;;'; --密码为abc;;

conn u1/'abc;;' ; --密码为abc;;

5.不可见字符

用户名和密码前后的不可见字符不会作为用户名和密码的部分,除非这些不可见字符在单引号或者双引号中。

conn u1 /\tabc; --用户为u1,密码为abc,\t被忽略

conn u1 /"abc\rd"; --用户为u1,密码为abc\rd,\r为密码的一部分

conn u1 /'abc\rd'; --用户为u1,密码为abc\rd,\r为密码的一部分

conn u1 /"abc\td"; --用户为u1,密码为abc\td,\t为密码的一部分

conn u1 /'abc\td'; --用户为u1,密码为abc\td,\t为密码的一部分

6.其他报错场景:

conn u1 / ab cd --报错

conn u1 /"abcd"ef --报错

conn u1 /'abcd'ef --报错

conn u 1/abcdef --报错

conn u/1 / abcdef --报错

conn 'u1'abc --报错

conn u1/'abc''def --报错

conn u1/"abc""a --报错

conn /123456 --报错

执行sql语句

Isql中一条普通sql语句以分号(“;”)结束,并以回车发送执行,如图所示,执行完成后

../../../../_images/image164.png

结果会打印在执行语句下方。

Isql中pl/sql语句以单独一行中输入斜杠(“/”)结束,并以回成发送执行,如图所示,执

../../../../_images/image175.png

行完成后结果会打在执行语句下方。

针对function和procedure的创建或替换语句也可以单独一行中输入“language ‘ploscar’”结束,如图5,执行完成后结果会打印在执行语句下方。

../../../../_images/image183.png

显示对象(list、\d命令)

List、\d命令支持查询object详细信息,详细命令见下表:

命令 描述
list database 查询所有数据库的名称、所属用户以及字符集,同命令\list
list namespace/schema [pattern] 查询所有匹配pattern(一个正则表达式)的模式名, 如果没有pattern参数,列出所有模式

list user [pattern]

\dg [pattern]

\du [pattern]

查询所有匹配pattern(一个正则表达式)的数据库用户, 如果没有pattern参数,列出所有用户
list ts/tablespace [pattern] 查询所有匹配pattern(一个正则表达式)的表空间, 如果没有pattern参数,列出所有表空间
list dblink [pattern] 查询所有匹配pattern(一个正则表达式)的dblink, 如果没有pattern参数,列出所有dblink
list [inner/all] table [pattern] 查询所有匹配pattern(一个正则表达式)的表,如果没有pattern参数,列出非系统、内部(inner)或所有(all)表
list [inner/all] view [pattern] 查询所有匹配pattern(一个正则表达式)的视图,如果没有pattern参数,列出非系统、内部(inner)或所有(all)视图
list [inner/all] index [pattern] 查询所有匹配pattern(一个正则表达式)的索引,如果没有pattern参数,列出非系统、内部(inner)或所有(all)索引
list [inner/all] sequence [pattern] 查询所有匹配pattern(一个正则表达式)的序列,如果没有pattern参数,列出非系统、内部(inner)或所有(all)序列
list [inner/all] system [pattern] 查询所有匹配pattern(一个正则表达式)的系统对象,如果没有pattern参数,列出非系统、内部(inner)或所有(all)系统对象
list proc/procedure [pattern] 查询指定pattern的存储过程,如果没有pattern参数,列出所有存储过程
list func/function [pattern] 查询指定pattern的函数,如果没有pattern参数,列出所有函数
list trigger [‘SYSDBA’] 查询指定命名空间的触发器,若未指定命名空间,列出所有触发器
list ExtTable/ExternalTable [‘SYSDBA’] 查看指定命名空间的外部表,若未指定命名空间,列出所有外部表
list mview/MaterialView [pattern] 查询所有匹配pattern(一个正则表达式)的物化视图, 如果没有pattern参数,列出所有物化视图
list FTIndex/FullTextIndex [‘SYSDBA’] 查询指定命名空间的全文索引,,若未指定命名空间,列出所有全文索引
list package 查询包
list synonym [‘SYSDBA’] 查询指定命名空间的同义词,若未指定命名空间,列出所有同义词
list dir/directory [‘SYSDBA’] 查询指定命名空间的目录对象,若未指定命名空间,列出所有目录对象

list aggre/aggregate [pattern]

\da [pattern]

查询所有匹配pattern的聚集函数,如果没有pattern参数,列出所有的聚集函数

list comm/comment [pattern]

\dd [pattern]

查询所有匹配pattern的对象的注释,支持的对象为comment语句支持所支持的对象

list domain [pattern]

\dD [pattern]

查询所有匹配pattern(一个正则表达式)的域(继承类型),如果没有pattern参数,列出所有域

list type [pattern]

\dT [pattern]

查询所有匹配pattern(一个正则表达式)的数据类型, 如果没有pattern参数,列出所有数据类型
list parameter [pattern/changed] 查询所有匹配pattern(一个正则表达式)的数据库参数,如果为changed代表查询已修改的配置参数
list operator [pattern] 查询所有匹配pattern(一个正则表达式)的操作符,如果没有pattern参数,列出所有操作符
list right [pattern] 查询所有匹配pattern(一个正则表达式)的表的访问权限, 如果没有pattern参数,列出所有表的访问权限
\d[tvisEm] [pattern]

查询所有匹配pattern的表、视图、物化视图、序列、外部表,如果没有pattern参数,列出所有表、视图、物化视图、序列和外部

表。如果指定了t、v、i、s、E、m参数,则只查看表、视图、索引、外部表、物化视图

\dC [pattern] 查询所有匹配pattern的源目标及目标类型的类型转换,如果没有pattern参数,列出所有的类型转换
\df[p] [pattern] 查询所有匹配pattern的函数及存储过程,如果没有pattern参数,列出所有函数、存储过程。如果指定了p参数,则 只查看存储过程
\dL [pattern] 查询所有匹配pattern的过程语言,如果没有pattern参数,列出所有过程语言
\do [pattern] 查询所有匹配pattern的运算符,如果没有pattern参数,列出所有运算符及结果类型
\dp [pattern] 查询所有匹配pattern的表、外部表、视图、序列的权限,如果没有pattern参数,列出表、外部表、视图、序列的权限

注解

pattern参数必须为REGEXP_LIKE函数所支持的正则表达式,pattern参数前后必须用双引号括起来,比如:list table "^t" ,这条语句将显示所有以字母t或T开始的表名,。

注解

list如果为大写,则部分list命令会显示系统对象,比如:LIST table命令会显示系统表和用户自定义表;list后面的对象类型不区分大小写; 如果list命令后面是有+号,则达标显示一些额外信息,比如:list+ table命令会显示表的描述信息。

注解

\d 命令后面是有+号,则达标显示一些额外信息,比如:\d+ tablename命令会显示表的描述信息。\d 部分命令后面支持S参数,S的作用是可以查看系统中的对象, 比如\dS命令会显示表及系统表的信息

描述对象(describe命令)

describe命令用于描述指定的表、索引、序列、视图、物化视图、分区表、自定义类型、复合类型、集合类型、临时表、同义词、分区索引、临时索引、外部表、特殊表、包、函数、存储过程、触发器。命令可简写做desc,使用如图所示。

命令 描述

desc tablename

desc viewname

desc sequencename

desc indexname

desc packagename

desc functionname

desc procedurename

desc triggername

desc typename

desc materializedviewname

desc partitiontablename

desc compositetypename

desc temptablename

desc collectiontypename

desc objecttypename

desc synonymname

desc partindexname

desc tempindexname

desc externaltablename

desc specialtablename

对于每个匹配指定名称的关系 (表、视图、索引、序列、物化视图、分区表、自定义类型、复合类型、集合类型、临时表、

同义词、分区索引、临时索引、外部表、特殊表、包、函数、存储过程、触发器),显示所有列(触发器除外)、它们的类型、表空

间(如果不是缺省的)和任何特殊属性(诸如NOT NULL或缺省等),以及相关的索引、约束、规则、触发器、返回值

../../../../_images/image195.png

注解

desc命令与\d命令相同,比如\d tablename或\d viewname。

设置isql运行属性(\pset命令)

\pset命令用于isql运行时的属性,该命令可以设置以下属性

命令 描述
\pset format value

设置显示格式,目前支持的值如下

aligned(默认值):对齐显示

unaligned:非对齐显示

wrapped:可换行,但需要设置\pset colums属性

html:html格式显示

latex:latex格式显示

troff-ms:troff-ms格式显示

\pset linestyle value 设置边框线的样式,支持的值为ascii、old-ascii、unicode
\pset border [value] 设置表格边框的样式,该值必须为数字,支持的值为:0(无边框)、1(内部分隔线)、2(表格框),大于2的值都会显示为表格框

\pset x [value]

\pset expanded [value]

\pset vertical [value]

设置显示模式是否为扩展模式,支持的值为 on、off、0、1、yes、no、ture、false。如果不设置value,则切换当前是否扩展状态
\pset numericlocale [value] 设置对于记录中有比较大的数值时,是否开启分隔符,支持的值为 on、off、0、1、yes、no、ture、false。如果不设置value, 则切换当前状态
\pset null value 设置要打印的字符串以代替null值
\pset fieldsep string 设置在非对齐模式下字段的分隔符,默认为'|',如果要使用特殊字符作为分隔符,请使用单引号括起来
\pset recordsep string 设置在非对齐模式下记录(行)的分隔符,默认为换行符,如果要使用特殊字符作为分隔符,请使用单引号括起来

\pset t [value]

\pset tuples_only [value]

设置是否开启打印列名称和结果行计数等信息,支持的值为 on、off、0、1、yes、no、ture、false。如果不设置value,

则切换当前状态

\pset title [value] 设置打印的表标题名称,如果不设置value,取消打印的表标题

\pset T [value]

\pset tableattr [value]

设置HTML输出格式中,table标签的名称,如果不设置value,则不显示table标签的名称
\pset pager [value]

设置记录是否more分页,支持的值为always(长字符more分页)、on、off、0、1、yes、no、ture、false,在windows环境下,启用

more分页时,如果列比较多的情况下会出现无规律乱码,这是windows下more命令的缺陷导致。如果不设置value,则切换当前状态

\pset footer [value] 设置是否开启表页脚(计数)显示。支持的值为 on、off、0、1、yes、no、ture、false。如果不设置value,则切换当前状态
\pset columns [value] 设置用户设置输出格式为wrapped后列的宽度,设置的宽度最小为窗口在垂直模式下最小显示的宽度,小于最小显示宽度则设置无效
\pset verify [value]

设置开启参数替换功能时,是否显示替换后的sql语句。支持的值为 on、off、0、1、yes、no、ture、false。如果不设置value,

则切换当前状态

\pset define [value] 设置是否开启参数替换功能,支持的值为 on、off
\pset concat value 是否开启连接标识符功能,默认标识符为".",支持的值为 on、off、单个(非数字和字母)字符
\pset escape value 是否开启转义标识符功能,默认标识符为"",支持的值为 on、off、单个字符
\pset rm-nb-space values 是否开启将特殊空格符号转换为普通空格符号,支持的值为 on、off

语句分隔符(delimiter命令)

Isql支持自定义sql语句和pl/sql语句分隔符,默认情况下普通语句分隔符号为分号[;] , PL/SQL分隔符号为斜杠[/],值得注意的是斜杠必须在单行中且只有斜杠。

可通过delimiter命令查询或自定义分隔符如图所示。自定义分隔符长度最大为15个字符,不可使用的字符或字符串有:

“\ " ' ( ) -- :: := .. /* */”

delimiter命令格式如下:

delimiter [分隔符]

delimiter后面如果不跟语句分隔符,则会显示当前正在使用的分隔符。

../../../../_images/image203.png

设置delimiter,普通语句和PL/SQL的分隔符都会修改为delimiter指定的分隔符

设置delimiter后(分号除外),以下情况需要注意:

  • 多语句之间需要用空格隔开,比如

    delimiter $$

    select 1 from dual$$ select 2 from dual$$ ,不能写成 select 1 from dual$$select 2 from dual$$

  • 数据中不要包含分隔符,比如

../../../../_images/image224.png
  • 不建议使用有歧义的分隔符,比如:666

    delimiter 666

    select 1666; --看着很诡异,结果为1

../../../../_images/image2110.png

事务模式(AUTOCOMMIT命令)

Isql中默认情况下,自动提交处于打开状态,这意味着每条语句(包括INSERT,UPDATE和DELETE语句之类的DML语句)在提交后都会自动提交,不需要COMMIT语句。Isql中可通过命令“\echo :AUTOCOMMIT”查看自动提交是否开启。若需关闭自动提交,可使用命令“\set AUTOCOMMIT off”(AUTOCOMMIT应为大写)。

设置“\set AUTOCOMMIT off” 后,接下来我们输入一条sql语句去进行执行,在执行该sql语句前,会先执行一次 "begin" 语句开启事务,其次再执行对应的sql语句,Isql提示符状态会变为"SQL=*>",此提示符状态表示正在处于事务当中。

如果需要结束事务,则需要对应的结束事务的sql语句。此时,Isql提示符状态会变为"SQL=>",此提示符状态表示事务已经退出,为初始状态。如果后续需要执行sql语句,状态依旧为"SQL=*>"。

如果关闭了自动提交选项后,如需要开启自动提交,则可使用命令“\set AUTOCOMMIT on”(AUTOCOMMIT应为大写)

../../../../_images/image233.png

执行上一条SQL命令(run命令)

Run命令向服务器发送 上一条SQL命令并且把结果写到文件或者管道, 如果没有给出参数,则写到标准输出,如图所示。

../../../../_images/image243.png

可通过内部 \g 命令达到与run命令一样的效果, 将上一条SQL命令的结果写入到文件或管道中

执行sql文件(@命令)

@命令指定sql文件并执行文件中的sql语句,命令效果类似于启动参数-f,此参数为兼容Oracle的sqlplus工具执行sql语句的方式。

../../../../_images/image418.png

亦可通过start或include命令指定sql文件并执行文件中的sql语句,命令效果同@,命令格式为“start sqlfilename”,“include sqlfilename”

执行计时(timing命令)

Isql内部可计算命令执行时间,默认为关闭状态,可通过命令“timing”或“set timing on”开启,关闭命令为“timing”或“set timing off”,如图所示。

../../../../_images/image253.png

亦可通过\timing开启或关闭计时功能。

执行结果输出文件 (spool/\out命令)

Isql通过spool命令将后续的所有输出同时输出到指定文件或管道,命令格式为“spool filename”,如图所示,“spool off”可关闭输出。

../../../../_images/image263.png

亦可通过\out命令或者\o命令将后续的所有输出同时输出到指定文件或管道,命令格式为“\out filename” 或者 “\o filename”,命令效果同spool,也可通过“spool off”关闭。

注意:windows下文件路径使用'/'而不是‘\’。如果查询结果集比较多,可以使用set term on/off开启或关闭查询结果集在客户端显示

查询计划开关 (SET AUTOTRACE命令)

Isql 通过“SET AUTOTRACE”命令以显示执行计划、IO统计信息和结果集,如图所示。

SET AUTOTRACE ON:打开自动跟踪功能,执行并显示执行计划和IO统计信息和结果集;

SET AUTOTRACE STAT:打开自动跟踪功能,执行并显示IO统计信息;

SET AUTOTRACE EXP:打开自动跟踪功能,执行并只显示执行计划;

SET AUTOTRACE TRACE:打开自动跟踪功能,执行并显示执行计划和IO统计信息;

SET AUTOTRACE OFF:关闭自动跟踪。

../../../../_images/image273.png

系统分页设置

Isql对于有结果返回的情况,会调用系统的more命令进行分页操作,通过pager变量可以关闭或开启分页功能。

该参数与游标设置参数enable_cursor_fetch互斥,开启了游标,系统分页自动关闭;开启了系统分页,游标设置关闭。

pager使用方法:

define pager always:在所有终端输出中都使用分页器,而不管它是否适合屏幕;

define pager on:在适当的时候使用分页器;

define pager off:不使用分页器;

使用\pset pager always/on/off效果和define一致。

带有value的\pset pager切换分页器的使用与否。

备注:Isql默认情况下是将一个查询的所有结果集返回到客户端, 如果查询结果比较大,isql所在客户端内存无法满足需求情况下,可能出现内存溢出相关错误。

分页功能也是在获取完整查询结果后进行的分页,因此为了避免大查询客户端内存耗尽问题,在做查询时可以开启游标功能。

注解

在windows系统下,用more对结果进行分页时,如果列比较多的情况下会出现无规律乱码,这是windows下more命令的缺陷导致,因此windows下默认关闭系统分页功能,使用者可以通过define pager on命令开启; Linux下默认开启系统分页功能。

游标设置

Isql默认情况下是将一个查询的所有结果集返回到客户端后再进行打印,如果查询结果比较大,isql所在客户端内存无法满足需求情况下,可能出现内存溢出相关错误。

因此通过isql支持了游标模式,通过enable_cursor_fetch和cursor_fetch_size两个isql的参数来设置查询语句是否使用游标方式执行。

即使开启了游标功能,isql也只会与select语句和with(with 相关的查询语句)使用游标功能。

该参数与系统分页设置参数pager互斥,开启了游标,系统分页自动关闭;开启了系统分页,游标设置关闭。

enable_cursor_fetch参数方法:

1)set enable_cursor_fetch on : 开启游标功能,游标默认每次获取20条数据,每次打印都会有表头,isql会自动获取完所有数据;

2)set enable_cursor_fetch paging :开启游标功能,游标默认每次获取20条数据,isql只获取第一批数据,用户需要手动输入任意键后获取下一批数据, 每次获取打印都会有表头;

因为这种模式下需要人工输入,因此不能将一个包含多个语句的sql语句块一次粘贴到isql执行,因为isql可能会将查询语句后面的语句当成查询语句在分批获取数据时的输入,导致select语句后面的语句无法正确执行。

3)set enable_cursor_fetch off :该参数默认值。关闭游标功能,cursor_fetch_size的值会恢复默认值20;

cursor_fetch_size参数方法:

set cursor_fetch_size n:n为一个整型数值,该参数默认值为20.代表游标每次获取数据的行数;

备注:enable_cursor_fetch参数为off时也可以设置,但不会有任何作用。建议只对大结果查询语句开启游标功能。

注解

游标的设置只能支持数据库所支持的创建游标的语句,比如select语句,有些存储过程也能返回结果集,但无法使用游标。 因此如果开启了游标后执行SQL报错,可参阅数据库日志进行分析

显示帮助(help命令)

Help命令显示SQL 命令的语法帮助, 用 * 可以看所有命令的帮助。

命令语法:help [name] 或 \h [name]

内部属性设置(set)

命令 描述
SET TIMING ON/OFF 打开或关闭执行命令计时功能
SET TIME ON/OFF 打开或关闭时间戳功能
SET FULLWIDTHREPLACE ON/OFF 打开或关闭全角转半角功能
SET ERROR_STOP ON/OFF 打开或关闭执行sql文件遇错误停止功能
SET LOWER_CASE_SENSITIVE ON/OFF 打开或关闭大小写敏感功能
SET AUTOTRACE ON 打开自动跟踪功能,执行并显示执行计划和IO统计信息和结果集
SET AUTOTRACE STAT 打开自动跟踪功能,执行并显示IO统计信息
SET AUTOTRACE EXP 打开自动跟踪功能,执行并只显示执行计划
SET AUTOTRACE TRACE 打开自动跟踪功能,执行并显示执行计划和IO统计信息
SET AUTOTRACE OFF 关闭自动跟踪功能
SET GROUPCOUNT NUMBER 设置结果打印行数,默认为0不限制行数,设置值NUMBER需大于等于10
SET CLIENT_ENCODING TO XXX 设置isql内部字符集格式(XXX为isql内部支持的字符集)
SET ENABLE_CURSOR_FETCH ON/OFF/PAGING 设置查询语句是否开启游标,只对select或with相关的查询语句有效
SET CURSOR_FETCH_SIZE [n] n为一个整数,代表游标一次获取行数,默认值为20
SET COMPLETE ON/OFF 设置是否开启tab键补全功能
SET TERM ON/OFF 设置是否将查询结果输出到客户端

需要注意的是ENABLE_CURSOR_FETCH参数与pager参数互斥,当用户使用游标方式获取数据时,将关闭系统分页器的使用,反之亦然。

sql语句的缺省提示

当我们输入对应的sql语句时,可能会缺少某些符号的输入,例如

../../../../_images/image283.png

此时,我们通过显示栏现实的缺省符号进行输入,以完成整个sql语句的执行,现有如下状态

状态 描述
"> 语句中缺少了"
(> 语句中缺少了)
'> 语句中缺少了'
*> 语句中缺少了*/
-> 语句没有结束,需要输入对应的结束符(sql语句为;,匿名块为/)
=> 初始状态

注解

创建函数、触发器、存储过程、匿名块时,不会显示对应的缺少状态

isql的事务提示

当我们输入begin语句后成功执行,会进入事务状态,此时显示的状态会发生变化,例如

../../../../_images/image483.png

图片中的SQL=>变为了SQL=*>,多出来的"*"则表示进入了事务状态,如果我们在事务中执行了错误的SQL语句,此时显示的状态会发生变化

../../../../_images/image493.png

图片中的SQL=*>变成了SQL=!>,由"*"变成了"!",该显示表示该事务已经执行失败了,需要用户输入END/ROLLBACK/ABORT/COMMIT语句来结束当前事务

../../../../_images/image503.png

此时,由SQL=!>变成了SQL=>,表示退出了事务状态,返回到了初始状态。在事务中,现有如下状态

状态 描述
"*> 现在处于事务模式中,同时语句中缺少了"
"!> 现在处于事务异常的状态中,同时语句中缺少了"
(*> 现在处于事务模式中,同时语句中缺少了)
(!> 现在处于事务异常的状态中,同时语句中缺少了)
'*> 现在处于事务模式中,同时语句中缺少了'
'!> 现在处于事务异常的状态中,同时语句中缺少了'
**> 现在处于事务模式中,同时语句中缺少了*/
*!> 现在处于事务异常的状态中,同时语句中缺少了*/
-*> 现在处于事务模式中,同时语句没有结束,需要输入对应的结束符 (sql语句为;,匿名块为/)
-!> 现在处于事务异常的状态中,同时语句没有结束,需要输入对应的结束符(sql语句为;,匿名块为/)
=*> 事务模式初始状态。用户可以输入END/ROLLBACK/ABORT/COMMIT语句退出当前事务,显示=>
=!> 事务异常的初始状态。用户可以输入END/ROLLBACK/ABORT/COMMIT语句退出当前事务,显示=>

注解

创建函数、触发器、存储过程、匿名块时,其中的begin语句不适用于上面表格状态,但在事务中创建函数、触发器、存储过程、匿名块时适用,但不会显示对应的缺少状态

智能提示

在Linux系统下,在isql中进行SQL编写和内部命令书写时,可以通过tab键对SQL关键字、数据库对象名、内部命令进行补全。当我们输入部分字符或者部分关键字时,按Tab键,窗口会显示下一个符合语法的关键字,如:

../../../../_images/image374.png

该功能默认开启,如果禁用此功能,可以使用isql -n参数在登录时关闭此功能,同时上下键功能也会被关闭; 还可以在isql登录数据库后,使用SET COMPLETE OFF/ON关闭或开启Tab键补全,使用SET COMPLETE OFF后,上下键补全功能可用。

智能提示仅支持基本语法,不支持复杂语法,该功能将持续完善。以下简单罗列智能提示支持的范围:

SQL语句语法提示

  • 支持DDL语句提示:CREATE 、DROP 、ALTER 、TRUNCATE 、COMMENT

    CREATE语句 : 会根据不同的对象进行语法提示,支持对象如下:

    CAST、CONTEXT、DATABASE、DATABASELINK、DIRECTORY、DOMAIN、FULLTEXT INDEX、FUNCTION、INDEX、MATERIAZED VIEW、PACKAGE、PROCEDURE、ROLE、 ROLLBACK SEGMENT、SCHEMA、SEQUENCE、STATISTICS、SYNONYM、TABLE、TABLESPACE、TRIGGER、TYPE、USER、VIEW

    DROP语句 : 会根据不同的对象进行语法提示,支持对象如下:

    ADUIT、CAST、CONTEXT、DATABASE、DATABASELINK、DIRECTORY、DOMAIN、FULLTEXT INDEX、FUNCTION、INDEX、MATERIAZED VIEW、PACKAGE、PROCEDURE、ROLE、 ROLLBACK SEGMENT、SAVEPOINT、SCHEMA、SEQUENCE、STATISTICS、SYNONYM、TABLE、TABLESPACE、TRIGGER、TYPE、USER、VIEW

    ALTER语句 : 会根据不同的对象进行语法提示,支持对象如下:

    DATABASE、DATABASELINK、FULLTEXT INDEX、FUNCTION、INDEX、ROLE、ROLLBACK SEGMENT、SCHEMA、SEQUENCE、STATISTICS、SYSTEM、TABLE、TABLESPACE、TYPE、USER、VIEW

  • 支持DML语句提示:SELECT 、DELETE 、UPDATE 、INSERT 、 MERGE 、WITH AS 、 WITH FUNCTION

  • 支持DCL语句提示:GRANTE 、REVOKE

  • 支持事务操作语句提示: COMMIT 、 ROLLBACK、 CHECKPOINT

  • 支持游标操作语句提示: MOVE 、 FETCH 、 DECLARE 、OPEN 、 CLOSE 、 DEALLOCATE

  • 其他语句提示:KILL 、SHUTDOWN 、SET 、CALL 、EXECUTE 、ABORT 、AUDIT 、NOAUDIT 、BULK 、 BEGIN 、 COMMENT 、 PREAPARE 、 TRUNCATE 、 EXPLAN 、 EXEC 、 PURGE 、 FALSHBACK TABLE

数据库对象提示

  • 支持SQL语句中对DATABASE、TABLE、SEQUENCE、INDEX、FUNCTION、PROCEDURE、VIEW、MATERIALIZED VIEW、COMMENT、TYPE、DATABASELINK、DIRECTORY、PACKAGE、CURSOR、等对象的名称进行提示;
  • 支持系统表和系统视图、动态视图名提示
  • 支持表和视图的列名提示
  • 支持函数的类型名提示

内部命令提示

CONNECT/CONN、COPYRIGHT、DELIMITER、DESCRIBE/DESC 、DISPLAY、ECHO、EDIT、HELP、HISTORY、INFO、SAVE、RUN、LIST/LIST+ 、QECHO 、PROMPT 、SPOOL 、DEFINE

元操作提示

\a、\connect、\conninfo、\C、\cd、\copyright、\crosstabview、\d、\da、\dC、\dd、\dD、\df、\dfp

\dg、\di、\dL、\dm、\do、\dp、\ds、\dS、\dt、\dT、\dv、\du、\i、\if、\e、\elif、\else、\echo

\encoding、\endif、\edit 、\f、\g、\h、\help、\H、\l、\list、\p、\password、\prompt、\pset、\q、\qecho、\r

\set、\sf、\sv、\t、\T、\timing、\unset、\x、\w、\z、\!、\?

注解

Windows系统不支持此功能的使用;智能提示适用与在PL中的SQL编写。

智能提示的特殊情况

粘贴执行SQL中有tab字符,比如复制一条语句为:create table a(int);(create和table间有多个Tab键),此时显示的效果如下

../../../../_images/image384.png

从中可以发现sql语句中的tab字符会触发isql的智能提示,会让粘贴执行的SQL显示比较混乱,但并不影响SQL语句的执行和正确性。

如果你发现有这种情况出现,可以在粘贴SQL语句之前执行SET COMPLETE OFF关闭补全功能,SQL执行完成后再执行SET COMPLETE ON 开启,显示效果如下

../../../../_images/image394.png

注解

如果设置了isql -n参数,SET COMPLETE OFF/ON将不会生效; 用@或run命令执行SQL文件时不会触发智能提示。

智能提示的对象名称补全

当我们输入"drop table"、"alter table"的关键词时,按住Tab键时,会显示当前模式下的对象及其他模式,显示效果如下

../../../../_images/image404.png

如果需要查询某个模式下的某张表,可以输入"模式."后,按住Tab键,显示效果如下

../../../../_images/image419.png

注解

isql支持context、database、domain、databaselink、function、index、package、procedure、role、rollback segment、schema、sequence、synonym、 statistics、tablespace、trigger、user、type、view对象的智能提示及补全

注解

当我们补全的对象为系统视图或系统表时,例如需要执行的语句为:desc v_sys_user时,针对系统视图或系统表名称补全,需要输入部分名称才可补全。 例如需要输入v_或者v$或者sys_后按下Tab键才可显示对应的系统试图或系统表,默认不显示系统视图及系统表的对象名称

智能提示的参数名称补全

当我们需要对数据库某个参数名称进行查看时,可以输入show关键字后,按住Tab键,显示效果如下

../../../../_images/image423.png

注解

isql支持reset、set命令的参数补全

智能提示的无输入补全(空白补全)

当进入isql时,控制台不输入任何内容,按下Tab键,会显示所有的sql关键字以及isql内部命令关键字,显示效果如下

../../../../_images/image433.png

智能提示的列名补全

当我们对表中的某个列进行操作时,但不知道具体的列名是什么。例如输入了一条语句为"insert into tab12("后按住Tab键,显示效果如下

../../../../_images/image443.png

当输入对应的列名后,需要用户输入")"号后才可继续补全后续的关键字

智能提示的函数类型补全

当我们创建了多态函数时,如果需要删除具体的某一个多态函数,但不知道函数中的具体的类型有那些,此时,我们可以按住Tab键,可以显示所有的多态函数的函数类型,显示效果如下

../../../../_images/image453.png

智能提示的变量名补全

当我们需要使用isql中某一个变量时,我们可以输入":"后,按住Tab键,即可显示isql中所有的变量命名称,显示效果如下

../../../../_images/image463.png

智能提示的多行补全

isql不仅可以支持单行的补全,也支持多行关键字补全,例如

../../../../_images/image473.png

多行补全也适用列名补全、函数类型补全、参数补全、变量名补全、对象补全及提示等功能

智能提示的伪补全

在DDL语句中定义一个对象时,对象名称会使用一个伪名称进行提示,例如

../../../../_images/image519.png

伪名称会使用中括号("[]")进行显示,中括号内的内容为对应的提示描述,用户可根据对应的伪名称提示进行输入

注解

对于对象名称补全,如果没有对应的对象名称,不会显示对应的伪名称。

注解

伪名称并非sql关键字,请勿将伪名称当作sql语句执行

退出isql(exit命令)

exit 命令用于退出isql客户端,退出后在isql中所有的用户设置将失效,如有需求可将自定义设置配置于isqlrc.conf中。

命令\q效果同exit。