文章
姚 鑫 · 三月 31 阅读大约需 15 分钟

第十四章 使用SQL Shell界面(二)

第十四章 使用SQL Shell界面(二)

存储和调用SQL语句

通过数据回调

SQL Shell自动将在终端会话期间发出的每个成功的SQL语句存储在本地缓存中,并为其分配一个顺序号。这些数字用于在当前Terminal过程中重新调用以前的SQL语句。 SQL Shell仅将数字分配给成功的SQL语句。如果在准备SQL语句期间发生错误,则不会分配任何编号。这些数字分配不是特定于名称空间的。以下是可用的数字调用命令:

  • :可以使用#列出所有先前缓存的SQL语句及其分配的编号。
  • #n:可以通过在SQL Shell提示符下指定#n来调用并执行先前的SQL语句,其中n是SQL Shell分配给该语句的整数。
  • #0:可以通过在SQL Shell提示符下指定#0来调用并执行最近准备的SQL语句。 #0调用最近准备的SQL语句,而不必调用最近执行的SQL语句。因此,调用和执行SQL语句对#0调用哪个SQL语句没有影响。

通过数字调用SQL语句不会为该语句分配新的数字。 SQL Shell在终端会话的持续时间内顺序分配数字;退出并重新进入SQL Shell或更改名称空间不会影响数字分配或先前分配的数字的有效性。

要删除所有号码分配,请使用#CLEAR并在显示的提示符下确认此操作。这将删除所有先前的号码分配,并从1重新开始号码分配。

通过名字回调

可以选择为SQL语句分配名称,然后按名称重新调用该语句。这些名称用于重新调用从任何当前用户的Terminal进程发出的SQL语句。通过名称保存和调用SQL语句有两种方法:

  • 使用SAVEGLOBAL保存到全局;使用OPEN从全局调用。
  • 使用SAVE保存到文件;使用LOAD从文件中调用。

保存到全局变量

要将全局名称分配给最新的SQL语句,请使用sql shell命令saveglobal名称,该名称可以缩写为SG名称。然后,可以使用SQL Shell命令打开名称来调用全局的SQL语句。如果Executemode是立即的,则SQL shell都会调用并执行该语句。如果延迟了executemode,则将准备该语句,但在指定GO命令之前,不会执行该语句。

每次使用打开名称以全局名称调用SQL语句时,SQL shell会为语句分配新号码。旧的和新数字都对调用数字仍然有效。

名称可以包含除空白字符之外的任何可打印字符。名称中的字母区分大小写。名称可以是任何长度。名称特定于当前命名空间。可以多次使用不同名称保存相同的SQL语句;所有已保存的名称都保持有效。如果使用已分配的名称保存SQL语句,则SQL Shell会提示是否希望覆盖现有名称,将其重新分配给新的SQL语句。

为当前命名空间分配全局名称。可以使用SQL Shell L(或列表)命令列出当前命名空间的所有分配的全局名称。分配后,所有当前用户的终端进程都可以使用名称。在创建它结束的终端进程后,分配的名称仍然存在。如果没有名称分配,则列表返回“保存”消息的“无语句”。

要删除全局名称分配,请使用清除名称。要删除当前命名空间的所有全局名称分配,请在显示的PROMP下使用清除并确认此操作

保存到文件

要将文件名分配给最新的SQL语句,请使用SQL Shell命令保存名称。然后,可以使用SQL Shell命令加载名称来调用SQL语句。如果Executemode是立即的,则SQL shell都会调用并执行该语句。每次使用Load Name按文件名调用SQL语句时,SQL Shell会将新号码分配给语句。旧的和新数字都对召回数字仍然有效。

名称可以包含除空白字符之外的任何可打印字符。名称中的字母区分大小写。名称可以是任何长度。名称特定于当前命名空间。可以多次使用不同名称保存相同的SQL语句;所有已保存的名称都保持有效。如果尝试使用已分配的名称保存SQL语句,则SQL Shell会提示是否希望覆盖现有名称,将其重新分配给新的SQL语句。

为当前命名空间分配名称。分配后,所有当前用户的终端进程都可以使用名称。在创建它结束的终端进程后,分配的名称仍然存在。

清除缓存查询Query

SQL shell提供了清除(缩写p)命令,以清除当前命名空间中的所有缓存查询。此命令清除名称空间中的所有缓存查询,而不仅仅是使用SQL Shell生成的查询。

$SYSTEM.SQL.Purge()方法和管理门户操作下拉列表选项为提供了更具体的选项,仅清除所选择的缓存查询或清除命名空间中的所有缓存查询。

配置SQL shell

  • 可以使用Management Portal配置SQL Shell默认值。
  • 可以使用SQL Shell参数配置单个SQL shell。更改SQL Shell参数覆盖SQL shell的当前调用的系统范围默认值;它不会更改系统范围的SQL shell默认值。

以下是可用的SQL Shell配置选项,相应的shell参数和默认设置:

管理门户shell配置 Shell 参数 默认
Select Mode selectmode Logical
SQL Dialect (TSQL) dialect (TSQL) IRIS
Schema Search Path path none
Result Column Alignment colalign Delimiter
Command Prefix (TSQL) commandprefix (TSQL) none
Result Output Display Mode displaymode Current Device
Display Path displaypath none
Display File displayfile none
Display File Translate Table displaytranslatetable none
Echo Mode echo On
Execute Mode executemode | Immediate
Messages Mode messages On
IF condition to allow execution 1
log| Off

标记为(TSQL)的参数主要用于从SQL Shell执行SybaseMSSQL Transact-SQL代码。

配置SQL Shell系统范围默认值

转到管理门户,选择系统管理,配置,SQL和对象设置,SQL。选择SQL Shell选项卡。查看并设置SQL Shell系统范围的当前默认设置。

如果更改一个或多个配置设置,则在管理门户路径之后立即由屏幕的左上角的星号(*)表示。例如,系统>配置> SQL *。按SAVE按钮接受更改。激活更改,星号消失。

为SQL shell配置参数

SQL Shell配置参数特定于当前终端进程上的当前SQL Shell调用。设置跨名称空间应用。但是,如果退出SQL Shell,则所有SQL Shell参数都会重置为系统宽的默认值。 Intersystems Iris提供系统默认值;您可以使用Set Save建立当前进程的不同默认值,如下所述。

SQL shell set命令(没有参数)显示当前shell配置参数,如以下示例所示。在此示例中,该组显示系统默认值,这些值是调用SQL Shell时建立的值:

[SQL]USER>>SET

commandprefix = ""
dialect = IRIS
displayfile =
displaymode = currentdevice
displaypath =
displaytranslatetable =
echo = on
executemode = immediate
log = off
messages = on
path = SQLUser
selectmode = logical
[SQL]USER>>

要显示单个配置参数的当前设置,请指定set param。例如,SET SelectMode返回当前选择介绍设置。

可以使用SQL Shell Set命令设置shell配置参数。 SQL Shell调用的持续时间持续一个设定值;每次调用SQL shell时,参数都会重置为默认值。设置可以使用以下任一语法表单:

SET param value
SET param = value

参数和值都不区分大小写。允许空间,但不需要,之前和之后。

SQL Shell Set Save命令将当前shell配置参数设置保存为用户默认值。这些默认值应用于当前进程的所有后续SQL Shell调用。它们也被应用于SQL Shell默认值,以在该用户调用的终端过程中的任何后续调用的SQL Shell。它们仍然有效,直到特别重置。使用Set保存不会影响当前正在运行的SQL Shell调用。

SQL Shell Set Clear命令清除(重置为系统默认值)当前进程的当前shell配置参数设置。 Intersystems IRIS将此重置应用于当前进程的后续SQL Shell调用,或者当前用户调用的任何新终端进程。设置清除不会影响当前运行的SQL Shell调用。

既不设定保存也没有设置清除更改系统范围的SQL Shell Shell默认设置,使用管理门户进行配置和显示。

Setting COLALIGN

可以使用Set Colalign来指定用于显示查询ResultSet数据和列标题的空格格式。可用选项包括:

  • 分隔符:ResultSet标题/数据列将基于标准分隔符(标签)对齐。这是默认值。
  • 标题:ResultSet标题/数据列将基于列标题的长度和标准分隔符(标签)对齐。
  • 数据:ResultSet标题/数据列将基于列数据属性的精度/长度和标准分隔符(标签)对齐。

设置displaymode和displaytranslatetable

可以使用Set DisplayMode指定用于显示查询数据的格式,如以下示例所示:

DHC-APP>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------

The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
DHC-APP>>SET DISPLAYMODE XML

displaymode = xml
DHC-APP>>

DisplayMode默认值是CurrentDevice,其在TXT格式中显示终端上的查询数据。可以指定set displaymode = cur恢复CurrentDevice默认值。

其他可用选项有TXTHTMLPDFXMLCSV
格式的选择决定了文件类型。
InterSystems IRIS创建这种类型的文件,将查询数据写入该文件,并在可能的情况下启动适当的程序来显示该查询数据文件。
对于除TXT之外的所有选项,将创建第二个文件来记录结果集消息。
默认情况下,SQL Shell在InterSystems IRIS mgr\Temp\目录中创建这些文件,并分配一个随机生成的带有适当文件类型后缀的文件名。
生成的消息文件名与数据文件名相同,除了附加的字符串“Messages”
对于HTMLPDFXML选项,消息文件具有与查询数据文件相同的文件类型后缀。
对于CSV选项,消息文件具有TXT文件类型后缀。

以下是DisplayMode = TXT时创建的文件的示例:

C:\InterSystems\IRIS\mgr\Temp\sGm7qLdVZn5VbA.txt
C:\InterSystems\IRIS\mgr\Temp\sGm7qLdVZn5VbAMessages.txt

每次运行查询时,SQL shell都会创建一个具有随机生成的文件名的新文件。

如果显示屏是txtcsv,则可以选择在执行格式转换时指定要应用的翻译表的名称可以指定SET DISPLAYTRANSLATESET DISPLAYTRANSLATERATE。转换表名称值区分大小写。

如果DisplayMode被设置为除CurrentDevice以外的值,则任何查询结果集包含控制字符的数据会导致生成的警告消息。通常,控制字符仅在逻辑模式下出现在查询结果集数据中。例如,列表结构中的数据包含在逻辑模式下显示的控制字符。因此,建议将DisplayMode设置为CurrentDevice以外的值时,还将SelectMode设置为显示或ODBC。

设置displayfile和displaypath

如果DisplayMode设置为“CurrentDevice以外的值”,则可以使用DisplayFileDisplayPath参数指定目标文件位置:

  • DISPLAYFILE:设置为一个没有后缀的简单文件名;
    例如:SET DISPLAYFILE = myfile
    也可以将该参数设置为部分限定路径,系统间的IRIS将该路径追加到DISPLAYPATH值或默认目录中,根据需要创建子目录;
    例如:SET DISPLAYFILE = mydir\myfile
    如果设置了DISPLAYPATH,系统将在指定的目录中创建一个以该文件名命名的文件;
    如果没有设置DISPLAYPATH,系统将在InterSystems IRIS mgr\Temp\目录下创建一个以该文件名命名的文件。
  • DISPLAYPATH:根据操作系统平台的不同,设置为以斜杠(“/”)或反斜杠(“\”)结尾的现有的全限定目录路径结构。
    如果设置了DISPLAYFILE,系统将在此目录下创建一个名为DISPLAYFILE的文件;
    如果没有设置DISPLAYFILE,系统将在该目录下创建一个随机生成的文件名文件。
    如果目录“DISPLAYPATH”不存在,InterSystems IRIS将忽略“DISPLAYPATH”“DISPLAYFILE”的设置,使用默认目录和随机生成的默认文件名。

必要时,系统自动在DISPLAYPATH值的末尾添加斜杠(或反斜杠)和/或从DISPLAYFILE值的开始删除斜杠(或反斜杠),以创建有效的完全限定目录路径。

设置DISPLAYMODEDISPLAYFILEDISPLAYPATH:

DHC-APP>>SET DISPLAYMODE XML

displaymode = xml
DHC-APP>>SET DISPLAYFILE = myfile

displayfile = myfile
DHC-APP>>SET DISPLAYPATH = C:\temp\mydir\

displaypath = C:\temp\mydir\
DHC-APP>>

执行查询时,SQL shell将生成以下文件。第一个包含查询数据。第二个包含Query执行产生的任何消息:

C:\temp\mydir\myfile.xml
C:\temp\mydir\myfileMessages.xml

如果既不指定DISPLAYFILE也不指定DISPLAYPATH,系统将在Mgr\Temp\目录下为InterSystems IRIS安装(例如,C:\InterSystems\IRIS\Mgr\Temp\)创建一个随机生成的文件名。

如果显示屏未设置为CurrentDevice,则每次使用displayfile集运行查询时,命名文件中的任何现有数据都会被新查询数据替换为新的查询数据。每次使用displayfile未设置查询时,SQL shell都会使用随机生成的文件名和新的相应邮件文件创建一个新文件。

如果displaymode设置为currentDevice,则DisplayFileDisplayPath参数无效。

设置executemode

SQL Shell支持立即和延迟的SQL语句执行。立即执行准备并在按Enter键时执行指定的SQL语句。延迟执行准备在输入Enter时,但在指定转到SQL提示符之前,不会执行它。

可用选项已立即设置ExecuteMode(默认值),设置ExecuteMode延迟和设置ExecuteMode以显示当前模式设置。以下示例设置执行模式:

DHC-APP>>SET EXECUTEMODE DEFERRED

Executemode = deferred

延迟执行允许准备多个SQL查询,然后按名称或编号调用它们以进行执行。要执行准备好的SQL语句,请调用所需的语句(来自适当的命名空间),然后指定Go

以下示例显示了在延迟模式下准备三个查询。前两个保存并分配了调用名称;第三个未分配一个名称,但可以通过数字来调用:

DHC-APP>>SELECT TOP 5 Name,Home_State FROM Sample.Person
1.      SELECT TOP 5 Name,Home_State FROM Sample.Person

---------------------------------------------------------------------------
DHC-APP>>SAVE 5sample

...statement saved as: 5sample
DHC-APP>>SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State
2.      SELECT TOP 5 Name,Home_State FROM Sample.Person ORDER BY Home_State

---------------------------------------------------------------------------
DHC-APP>>SAVE 5ordered

...statement saved as: 5ordered
DHC-APP>>SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State
3.      SELECT Name,Home_State FROM Sample.Person ORDER BY Home_State

---------------------------------------------------------------------------

以下示例显示了延迟模式执行前一个示例中定义的两个查询的执行。请注意,此示例通过名称调用一个查询(在调用SQL Shell提供新号码时,并按编号调用一个查询:

DHC-APP>>go


C:\InterSystems\Cache\mgr\Temp\ffQlXfFdbGnOxA.xml
Messages.xml
statement prepare time(s)/globals/lines/disk: 0.0526s/45464/263430/5ms
          execute time(s)/globals/lines/disk: 0.2948s/153553/1042318/75ms
---------------------------------------------------------------------------

Setting ECHO

可以使用Set Echo来指定是否将查询结果恢复到SQL Shell。如果指定SET Echo = OFF,则准备查询,定义缓存查询,并执行查询。终端没有查询结果。这在以下示例中显示:

DHC-APP>>set echo=off

echo = off
DHC-APP>>SELECT Name,Age FROM Sample.Person
4.      SELECT Name,Age FROM Sample.Person

--------------------------------------------------------------------------

如果指定SET Echo = ON(默认值),则将查询结果显示给终端。这在以下示例中显示:

DHC-APP>>set echo=on

echo = on
DHC-APP>>SELECT Name,Age FROM Sample.Person
5.      SELECT Name,Age FROM Sample.Person

---------------------------------------------------------------------------
DHC-APP>>go


C:\InterSystems\Cache\mgr\Temp\LVZpPfjfxXXJBg.xml
Messages.xml
statement prepare time(s)/globals/lines/disk: 0.0001s/5/187/0ms
          execute time(s)/globals/lines/disk: 0.1613s/152365/1040157/0ms
---------------------------------------------------------------------------

SET Echo如果displaymode = currentDevice(默认值)仅有意义。

SET ECHOSET MESSAGES指定终端显示的内容;
它们不会影响查询的准备或执行。
如果SET MESSAGES=OFF和SET ECHO=OFF,则查询准备好了,一个缓存的查询被创建,查询执行创建一个查询结果集,但是没有返回给终端。

Setting MESSAGES

可以使用SET MESSAGES来指定是否显示查询错误消息(如果不成功)或查询执行信息(如果成功):
- 如果查询执行不成功:如果指定SET MESSAGES=OFF,则终端不会显示任何信息。
如果指定SET MESSAGES=ON(默认值),则返回查询错误提示,如下所示:error #5540: SQLCODE: -30 message: Table 'SAMPLE
值得注意的没有找到。
- 如果查询执行成功:如果指定SET MESSAGES=OFF,则只显示查询结果和受影响的n行。
如果指定SET MESSAGES=ON(默认值),则查询结果和受影响的n行(s行)后面紧跟着语句准备度量、语句执行度量和生成的缓存查询的名称。

准备和执行指标以运行时间(以毫秒为单位)、全局引用总数、执行的命令总数和磁盘读取延迟(以毫秒为单位)来衡量。

设置DISPLAYMODE不会改变SET MESSAGES=ON时显示的信息。
一些DISPLAYMODE选项同时创建一个查询结果集文件和一个消息文件。
该消息文件包含结果集消息,而不是set messages =ON时显示到终端的查询准备和执行消息。

设置消息并设置echo指定终端上显示的内容;它们不会影响查询的准备或执行。如果SET MESSAGENT = OFFSET ECHO = OFF,则准备成功的查询,创建缓存的查询,查询执行创建查询结果集,但没有返回到终端。

Setting LOG

可以使用Set日志指定是否将SQL Shell活动记录到文件。可用选项包括:
- SET LOG OFF: 默认值。 Intersystems IRIS不会为当前SQL Shell记录活动。
- SET LOG ON: Intersystems Iris将SQL Shell活动记录到默认日志文件。
- SET LOG pathname:Intersystems Iris将SQL Shell活动记录到Pathname指定的文件。

SET LOG ON在IRIS\mgr\namespace中创建一个日志文件,其中namespace是进程当前命名空间的名称。
这个默认日志文件名为xsqlnnnn。
其中nnnn是当前进程的进程ID (pid)号。

日志文件可以挂起并恢复。
创建日志文件后,SET log OFF会挂起对该日志文件的写入。
设置LOG ON恢复写入默认日志文件。
日志重新启动:日志恢复时,将日期时间写入日志文件。
设置LOG ON总是激活默认日志文件。
因此,如果暂停写入指定的路径名日志文件,则在恢复时必须指定SET log pathname

激活日志文件创建终端上显示的SQL Shell活动的副本;它不会重定向SQL Shell终端输出。 SQL Shell Log为失败的SQL执行和SQL代码记录SQL错误,并为成功的SQL执行而导致的行计数。 SQL Shell日志不会记录结果集数据。

如果日志已处于活动状态,则指定“设置”登录无效。如果日志已处于活动状态,则指定设置日志路径名暂停当前日志并激活路径名指定的日志。、

Setting PATH

可以使用SET路径架构来设置Schema Search Path,SQL用于提供不合格表名的正确架构名称。架构可以是单个架构名称,或者逗号分隔的架构名称列表,如下例所示:

DHC-APP>>SET PATH cinema,sample,user

path = cinema,sample,user

没有任何参数的设置路径删除了当前架构搜索路径,恢复系统范围的默认模式名称。

如果未指定SET路径架构,或者在指定的模式中找不到表,则SQL Shell使用系统范围的默认模式名称。

Setting SELECTMODE

可以使用SetSeliteMode指定用于显示查询数据的模式。

DHC-APP>>SET SELECTMODE DISPLAY

selectmode = display

可用选项显示,逻辑和ODBC。逻辑是默认值。要确定当前模式,请指定SETELESMODE,无需值:

DHC-APP>>SET SELECTMODE logical

selectmode = logical

%List数据使用非打印字符进行编码。因此,当SelectMode =逻辑时,SQL shell将%List数据值显示为$listbuild语句,例如以下$lb("White","Green")。时间数据类型数据支持分数秒。因此,当SelectMode = ODBC时,SQL Shell显示分数秒,这与ODBC标准不对应。实际的ODBC时间数据类型截断分数秒。

还可以使用SET SELECTMODE指定输入数据是否将从显示格式转换为逻辑存储格式。
要进行此数据转换,必须使用select运行时模式编译SQL代码。
在执行时,SET SELECTMODE必须设置为LOGICAL(默认值)。

00
1 0 0 33
Log in or sign up to continue