搜索​​​​

清除过滤器

#InterSystems 官方

11 帖子4 关注者

#InterSystems IRIS

780 帖子3 关注者

#InterSystems报表

4 帖子0 关注者
文章
Louis Lu · 十一月 2, 2021

IRIS 2021 技术文档 First Look 20 -- SQL 文本搜索

本文档向您介绍 InterSystems IRIS®数据平台对 SQL 文本搜索的支持,它为各种语言的非结构化文本数据提供语义上下文搜索。它涵盖了以下主题: 为什么 SQL 搜索很重要 InterSystems IRIS 如何实现 SQL 搜索 尝试 SQL 搜索 有关 SQL 搜索的更多信息 本文档介绍了 SQL 上下文感知文本搜索,并介绍了一些与索引文本数据相关的初始任务,以进行搜索和执行 SQL 搜索。一旦您完成了这个探索,您将在一个 SQL 列中为文本搜索建立索引,并执行几种类型的搜索。这些活动被设计为只使用默认设置和功能,以便您熟悉该功能的基本原理。有关 SQL 搜索的完整文档,请参见 SQL Search Guide(《SQL 搜索指南》)。 处理非结构化文本的一个相关但独立的工具是自然语言处理(Natural Language Processing,NLP)。SQL 搜索假定您知道要查找的内容。NLP 文本分析允许您在没有事先了解文本内容的情况下分析文本的内容 。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 为什么 SQL 搜索很重要 快速搜索非结构化文本数据的能力是访问许多公司和机构普遍存储的大量文本内容的基础。任何此类数据的搜索工具必须具有以下功能: 快速搜索:InterSystems IRIS SQL 搜索可以快速搜索大量的数据,因为它搜索的是生成的优化数据索引,而不是顺序搜索数据本身。 单词感知(Word-aware)搜索:SQL 搜索不是字符串搜索,它是基于文本中语义结构的搜索。SQL 搜索的最基本的语义结构是单词。这就减少了在字符串搜索中发现嵌入另一个单词中的字符串,或当字符串连接两个单词时产生的误报数量。 实体感知(Entity-aware)搜索:SQL 搜索考虑了多个单词,这些单词根据语义关系分组形成实体。因此,它可以搜索指定顺序(位置短语)中的多个单词、出现在彼此特定接近范围内的单词(无论顺序如何),以及在实体的开头或结尾找到的单词。这使您能够将搜索范围缩小到在其他单词的指定上下文中找到的一个单词(或短语)。 语言感知(Language-aware)搜索:识别单词之间的语义关系是基于语言的。SQL 搜索包含十种自然语言的语义规则(语言模型)。它还提供对其他语言的支持。它不需要创建或关联字典或本体。 模式匹配:SQL 搜索同时提供通配符匹配和正则表达式(RegEx)匹配,来匹配字符模式。 模糊匹配:SQL 搜索为近似匹配提供模糊搜索,这些搜索考虑了搜索字符串的计算变化程度。这使拼写错误的匹配成为可能。 派生匹配:SQL 搜索可以使用分解来匹配词根和组件词。SQL 搜索可以使用同义词表来匹配同义词和短语。 InterSystems IRIS 如何实现 SQL 搜索 SQL 搜索可以搜索在 SQL 表的列中发现的文本数据。为了做到这一点,您必须为包含文本数据的列创建一个 SQL 搜索索引。InterSystems 将表列实现为持久化类中的属性。 有三个级别的索引可用,每个级别都支持附加的功能以及较低级别的所有功能:基本(Basic)、语义( Semantic)和分析(Analytic): 基本(Basic)支持单词搜索和位置短语搜索,包括使用通配符、短语中单词之间的范围、正则表达式(RegEx)匹配和共同出现搜索。 语义(Semantic) 支持所有的基本功能,并且还支持 InterSystems IRIS 自然语言处理(NLP)实体。它可以搜索实体,以及以实体开头或以实体结尾的单词或短语。它能识别 NLP 的属性,比如否定。 分析(Analytic) 支持所有的语义(Semantic)功能,也支持 NLP 路径。它还可以根据 NLP 优势和接近度分数进行搜索。 填充索引。像所有的 SQL 索引一样,您可以在数据填充表之后直接构建索引,也可以在将记录插入空表时让 SQL 自动构建索引条目。无论哪种情况,SQL 都会自动更新此索引作为后续插入、更新或删除操作的一部分。 您执行 SQL 搜索,编写一个 SELECT 查询,其中的 WITH 子句包含 %ID %FIND search_index() 语法。search_index() 函数的参数包括 SQL 搜索索引的名称和搜索字符串。这个搜索字符串可以包括通配符、位置短语和实体语法字符。搜索字符串还可以包括 AND、OR 和 NOT 逻辑运算符。 尝试 SQL 搜索 使用 InterSystems IRIS SQL 搜索很容易。这个简单的程序将引导您完成搜索以字符串形式存储在 SQL 表列中的文本数据的基本步骤。 要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您正在工作的系统中(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您还将使用一个 IDE,如 VS Code 或 Studio,在实例中创建 ObjectScript 代码。有关设置这些 IDE 并将其连接到您的实例的说明,请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Visual Studio Code 或 Studio。。 用前须知 要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您工作的系统中(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您还需要从 GitHub repo https://github.com/intersystems /Samples-Aviation 获得 Aviation.Event 表和相关文件。 下载和设置示例文件 Samples-Aviation 源(sources)必须可由实例访问。下载文件的程序取决于您所使用的实例类型,如下所示: 如果您使用的是 ICM 部署的实例: 使用带有 -machine 和 -interactive 选项的 icm ssh 命令,在托管实例的节点上打开默认 shell,例如: icm ssh -machine MYIRIS-AM-TEST-0004 -interactive 在 Linux 命令行上,使用以下命令之一将 repo 克隆到实例的数据存储卷(data storage volume)。例如,对于部署在 Azure 上的配置,数据卷的默认挂载点(default mount point)是 /dev/sdd,因此您可以使用如下命令: $ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics OR $ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd 这些文件现在对容器文件系统上 /irissys/data/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 如果您正在使用通过其他方式部署的容器化实例(授权版或社区版(Community Edition)): 在主机上打开 Linux 命令行。如果您在云节点上使用社区版(Community Edition),请使用 SSH 连接该节点,如在 Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中所述。 在 Linux 命令行上,使用 git clone 或 wget 命令,如上所述,将 repo 克隆到容器中挂载为卷(mounted as a volume)的存储位置。 对于社区版(Community Edition)实例,您可以克隆到实例的持久化 %SYS 目录 (存储特定于实例的配置数据的目录)。在 Linux 文件系统中,这个目录是 /opt/ISC/dur。这使得文件对容器文件系统上 /ISC/dur/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 对于已授权的容器化实例,选择容器中作为卷挂载(mounted as a volume)的任何存储位置(如果使用它,包括持久化 %SYS 目录)。例如,如果您的 docker run 命令包含选项 -v /home/user1:/external,并且您将 repo 克隆到 /home/user1, 则文件对容器文件系统上 /external/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 如果您使用的是 InterSystems 学习实验室(Learning Labs)实例: 在集成 IDE 中打开命令行终端。 将目录更改为 /home/project/shared 并使用 git clone 命令克隆 repo: $ git clone https://github.com/intersystems/FirstLook-SQLBasics 该文件夹被添加到左边资源管理器(Explorer)面板的 Shared (共享)下,并且该目录对 /home/project/shared 中的 InterSystems IRIS 可用。 如果您使用的是已安装的实例: 如果实例的主机是安装了 GitHub 桌面(GitHub Desktop)的 Windows 系统: 在主机的 web 浏览器中进入 https://github.com/intersystems/Samples-Aviation。 选择 Clone or download(克隆或下载) ,然后选择 Open in Desktop(在桌面上打开)。 这些文件对您的 GitHub 目录中的 InterSystems IRIS 可用,例如在 C:\Users\User1\Documents\GitHub\FirstLook-SQLBasics 中。 如果主机是 Linux 系统,只需在 Linux 命令行上使用 git clone 命令或 wget 命令,就可以将 repo 克隆到您所选择的位置。 一旦您获得了示例文件,请按照"设置说明"下的 Samples-AviationREADME.md 文件中提供的步骤操作: 创建一个名为 SAMPLES 的命名空间,如下所示: 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中URL described for your instance(为您的实例描述的 URL),在浏览器中打开您的实例的管理门户(Management Portal)。 选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Namespaces(命名空间) ,进入 Namespaces(命名空间)页面。 在 Namespaces(名称空间) 页面,选择 Create New Namespace(创建新的命名空间)。这将显示 New Namespace(新命名空间) 页面; 按照 System Administration Guide(《系统管理指南》) 中“Configuring InterSystems IRIS(《配置 InterSystems IRIS》)”章节中 Create/Modify a Namespace(创建/修改命名空间)中的说明使用此页面。 调用新的命名空间 SAMPLES。 选择靠近页面顶部的 Save(保存) ,然后在生成的日志末尾选择 Close(关闭)。 使 SAMPLES web 应用程序与 InterSystems IRIS 分析(Analytics) 一起使用: a.在管理门户(Management Portal)中,点击 System Administration(系统管理) > Security(安全) > Applications(应用程序) > Web Applications(web 应用程序)。 b.点击最左侧列中的 /csp/samples 链接(假设您创建的命名空间名为 SAMPLES)。 c.在 Enable(启用) 部分,选择 Analytics(分析)。 d.点击 Save(保存)。 使用 InterSystems IRIS Basics:Connecting an IDE( 《InterSystems IRIS 基础:连接一个 IDE》)中procedure described for your instance(为您的实例描述的程序)打开 InterSystems 终端(Terminal),并输入以下命令,更改加载示例的命名空间: set $namesapce="SAMPLES" 输入以下命令,将 .path 替换为包含您克隆或下载的 repo 的 README.md 和 LICENSE 文件的目录的完整路径: do $system.OBJ.Load("<path>\buildsample\Build.AviationSample.cls","ck") 输入以下命令: do ##class(Build.AviationSample).Build() 当出现提示时,输入包含 README.md 和 LICENSE 文件的目录的完整路径。然后,该方法加载和编译代码,并执行其他需要的设置步骤。 创建和测试一个基本的 SQL 搜索索引 一旦代码编译完成(可能需要一两分钟),继续执行以下步骤: 使用您选择的 IDE,通过在 SAMPLES 命名空间中定义以下类(class)来创建基本 SQL 搜索(Basic SQL Search)索引: Class Aviation.TestSQLSrch Extends %Persistent [DdlAllowed,Owner={UnknownUser},SqlRowIdPrivate, SqlTableName=TestSQLSrch ] { Property UniqueNum As %Integer; Property Narrative As %String(MAXLEN=100000) [ SqlColumnNumber=3 ]; Index NarrBasicIdx On (Narrative) As %iFind.Index.Basic(INDEXOPTION=0,LANGUAGE="en",LOWER=1); Index UniqueNumIdx On UniqueNum [ Type=index,Unique ]; } 这个示例创建了一个持久化类(表),其中包含一个 Narrative 属性(列),并为这个属性定义了一个基本 SQL 搜索(Basic SQL Search)索引。因为这是一个新类,所以您必须用文本数据填充表。 用文本数据填充表并构建 SQL 搜索索引。SQL 搜索索引的构建和维护与任何其他 SQL 索引一样。 并输入以下命令,以使用您下载的 Aviation.Event 表中的文本数据填充新表。在这个示例中,SQL 搜索索引是在添加每条记录时自动构建的: set $namespace = "SAMPLES" set in1="INSERT OR UPDATE INTO Aviation.TestSQLSrch (UniqueNum,Narrative) " set in2="SELECT %ID,NarrativeFull FROM Aviation.Event WHERE %ID < 100" set myinsert=in1_in2 set tStatement=##class(%SQL.Statement).%New() set qStatus=tStatement.%Prepare(myinsert) if qStatus'=1 {write "%Prepare failed:" DO $System.Status.DisplayError(qStatus) quit} set rset=tStatement.%Execute() write !,"Total rows inserted=",rset.%ROWCOUNT 出于性能的考虑,您可能希望使用 %NOINDEX 选项来推迟构建索引,直到表被完全填充,然后使用 %Build() 方法构建 SQL 搜索索引(和任何其他定义的索引)。 或者,您可以在已经包含文本数据的现有持久化类中添加 SQL 搜索索引,然后使用 %Build() 方法填充 SQL 搜索索引。 在终端(Terminal)中打开一个 SQL Shell,如在 First Look:InterSystems SQL(《技术概要:InterSystems SQL》)中 Creating and Populating a Table With a SQL Script File(使用 SQL Script 文件创建和填充表)的前几个步骤中所述,并使用 SQL 搜索作为 SELECT 查询的 WHERE 子句条件。WHERE 子句可以包含由 AND 逻辑关联的其他条件。在 SAMPLES 命名空间运行以下 SQL 查询: SELECT %iFind.Highlight(Narrative,'"visibility [1-4] mile*" AND "temp* ? degrees"') FROM Aviation.TestSQLSrch WHERE %ID %FIND search_index(NarrBasicIdx,'"visibility [1-4] mile*" "temp* ? degrees"',0,'en') Search_index() 函数指定了一个 search_index 参数。这是为要搜索的属性(列)定义的 SQL 搜索索引。它可以是一个基本(Basic)、语义(Semantic)或分析(Analytic)索引。 Search_index() 函数指定了一个 search_item 参数。 这个示例将 search_item 定义为 "visibility [1-4] mile*" "temperature ? degree*"。这将以任意顺序返回包含两个位置短语的所有记录: "visibility [1-4] mile*"返回单词“visibility”和“mile”之间有 1 到 4 个单词的短语。 因为 mile* 指定了一个通配符,它可以匹配 mile 或 miles。例如,"visibility less than 1 mile ","visibility 10 miles ","visibility approximately 20 statute miles","visibility for many miles"。 "temp* ? degrees"返回以 "temp "开头、以 0 个或更多非空格通配符结尾的单词,一个缺失的单词,然后是单词"degree"的短语。因此,它将返回带有 短语 "temperature 20 degrees","temp. 20 degrees","temperature in degrees",以及(可能是无意的)"temporarily without degrees"。 search_index() 函数可以选择性地指定一个 search_option 参数。 该选项可以对搜索应用可选转换,如下所示:1=词干搜索应用词干匹配词或短语基于他们的词干形式。2=分解搜索将分解应用于复合词。3=模糊搜索将指定的模糊程度(字符差异的数量)应用于搜索。4=正则表达式搜索允许使用 RegEx 匹配进行搜索。这个示例指定了默认值 0,意味着没有搜索转换。 Search_index() 函数可以选择性地指定一个 search_language 参数。您可以指定一种语言,或指定'*'来调用自动语言识别,支持搜索包含多种语言的文本。这个示例指定默认值'en'(英语)。 这个示例还通过将相同的 search_item 应用于返回的记录来突出显示返回的文本。这通过使用 <b> 和 </b> 标签为它们定界来突出这两个短语的每一个实例。 提供这个示例是为了让您初步体验 InterSystems IRIS SQL 搜索。您不应该将这个示例作为开发真正的应用程序的基础。要在实际情况下使用 SQL 搜索,您应该充分研究软件提供的可用选择,然后开发您的应用程序以创建健全和高效的代码。 了解有关 SQL 搜索的更多信息 InterSystems 还有其他参考资料可以帮助您了解有关 SQL 搜索的更多信息,包括: Using InterSystems SQL Search(《使用 InterSystems SQL 搜索》)

#InterSystems IRIS for Health

633 帖子0 关注者

#InterSystems IRIS FAQ

0 帖子0 关注者
文章
Qiao Peng · 八月 23, 2022

InterSystems 常用术语

任何技术总是有些自己独特的术语,尤其是一些英文术语,对于新的用户来说往往即陌生又迷惑。这里整理了一下常听到的InterSystems术语,帮助大家尽快进入InterSystems技术圈子。 名词 说明 Arbiter 仲裁器。用于在mirror高可用集群里辅助判断主备机成员状态,提高高可用集群的有效性 Atelier InterSystems开发的基于Eclipse的IDE,可以单独部署、也可以嵌入Eclipse bitmap索引 位图索引。以位图方式保存的枚举类型数据的索引,用于高性能查询 bitslice索引 位片索引。用位图方式对数值型数据建立的索引,用于高性能查询 Buttons Cache'数据库上的诊断报告工具。历史上,InterSystems曾经提供一个routine,名为^Buttons,用于收集系统数据用于诊断。虽然后来这个工具已经被放在%SYS.Task.DiagnosticReport类中,但大家还是习惯称之为buttons cconsole log Cache'数据库的控制台日志文件,记录通用信息、系统错误、特定操作系统错误、网络错误等。它含有非常重要的系统诊断信息 CPF InterSystems数据平台的参数配置文件(Configuration Parameter File), 文件后缀为cpf CSP Cache' Server Page的缩写,它是InterSystems数据平台提供的服务器端网页技术 CSP gateway 部署在网络服务器上的、用于和后台InterSystems Cache'数据平台通讯的组件,它由InterSystems提供 deamon InterSystems数据平台的后台关键进程,例如写进程、journal进程等 DeepSee InterSystems Cache'数据库提供的内嵌式BI工具,不用迁移数据即可对事务型数据进行BI分析。在InterSystems IRIS中改名为InterSystems Analytics dejournal 将数据库操作日志Journal中的记录重新执行的过程 dejournal filter 在数据库操作日志Journal中的记录重新执行的过程中,对记录进行事先过滤的过滤器代码 dismount 数据库卸载 ECP ECP是InterSystems企业缓存协议(Enterprise Cache Protocol)的缩写。ECP是InterSystems高性能集群架构协议,简称ECP集群,由数据服务器和应用服务器组成。应用服务器缓存数据服务器的数据,对客户端提供媲美内存数据库性能的访问效率 Embedded SQL 嵌入式SQL,在ObjectScript中直接使用SQL语言的特性 Global Buffers 数据缓存 global mapping 将数据库的global映射到特定命名空间,从而使其在命名空间中可以被访问 IAM InterSystems API管理器。它是一个容器化的API全生命周期管理的独立组件 ICM InterSystems的云管理器,用于对云部署的InterSystems数据平台集群进行配置、管理和运维 iKnow InterSystms Cache'数据库上的自然语言处理技术。在InterSystems IRIS上已经改名为InterSystems IRIS Natural Language Processing (NLP) Instance 一个安装好的InterSystems Cache'/Ensemble/Health Connect/IRIS实例 Journal Journal是InterSystems数据平台产生的数据操作日志。它被用于保证数据一致性、高可用、灾备等多种场景,是非常重要的数据库特性 License 授权文件,用于激活InterSystems产品 License服务器 在InterSystems数据平台集群部署时,把授权文件集中部署在一台服务器上供集群分享。这台服务器称之为license服务器 messages log InterSystems IRIS数据平台的控制台日志文件,记录通用信息、系统错误、特定操作系统错误、网络错误等。它含有非常重要的系统诊断信息 Mirror InterSystems镜像技术,这是一个高可用的技术。通过主服务器与镜像备用服务器间的同步操作日志(journal)来保持数据一致,并在故障时自动切换。Mirror不依赖共享存储和操作系统级的故障转移能力,提供低成本的、秒级的切换 mirror同步成员 用于高可用的一对mirror实例,它们之前保持强同步 mirror异步成员 用于高可用目的之外的mirror实例,它们与主机保持弱同步,可以用于灾备、报告与查询等目的 mount 数据库加载 M语言 M语言是MUMPS(Massachusetts General Hospital Utility Multi-Programming System)语言的简称。MUMPS在马塞诸塞州总医院开发,是一个基于多维模型数据库的高性能事务处理语言。InterSystems是M语言的早期厂商之一,后来通过收购兼并了市场上主要的M厂商。InterSystems目前自己的ObjectScript语言与M语言有非常大的差异,例如支持面向对象,因此并非一种语言 namespace 命名空间。 InterSystems数据平台的逻辑工作平台,包括保存在不同数据库的数据和代码 ObjectScript InterSystems的对象脚本语言,这是一个弱类型的面向对象语言 Package mapping 数据包映射。将数据库的类包映射到特定命名空间,从而使其在命名空间中可以被访问 pButtons Cache'数据库上的性能监控工具。它是一个routine, 名为^pButtons。由于Cache'数据库庞大的安装基数,即便在InterSystems IRIS新一代数据平台上性能监控工具已经改名为^SystemPerformance,大家还是习惯称系统自带的性能监控工具为pButtons routine 用ObjectScript编写的非OO的服务器端程序 routine mapping 将数据库的routine映射到特定命名空间,从而使其在命名空间中可以被访问 SAM InterSystems的系统告警与监控管理器。它是一个容器化的独立组件 Shadow 在Mirror技术之前的InterSystems数据同步机制。通过在Shadow主备机之间传递Journal来实现备机对主机的数据同步。它不是严格意义上的高可用方案 sharding 数据分片。通过将一个大数据集拆分成若干小的数据分片,提供横向可扩展的访问机制 SMP 系统管理门户。它是随InterSystems数据平台安装的用于后台管理与开发的Web应用,最常用的后台管理应用 Studio InterSystems开发的IDE,运行在Windows操作系统上 superserver 超级服务器,InterSystems数据平台实例监听特定端口,并分配给后台子系统,它称之为超级服务器。默认的监听端口时1972 Web网关 部署在网络服务器上的、用于和后台InterSystems IRIS数据平台通讯的组件,它由InterSystems提供 WIJ write image journaling的缩写,是InterSystems数据平台在写后台进程将数据更新完全写入数据库文件前,保证数据一致性、降低硬件故障造成的数据风险的机制 ZEN Zen是InterSystems Cache'数据库提供的组件化的网页应用架构 Tune table 调优表。是InterSystmes 数据平台提供的对SQL数据进行统计的分析工具和分析过程。调优表采集的统计数据会被用于SQL编译器对SQL语句进行执行优化 私有Apache InterSystems数据平台安装时,会自动安装一个私有的Apache,用于支撑其管理门户网页应用,同时方便其开放的网页应用、SOAP服务、RESTful API等基于HTTP服务的测试与调试。私有Apache功能不完整,不应用于发布InterSystems数据平台上基于HTTP的服务,应该独立部署完整功能的网络服务器 虚拟文档 InterSystems数据平台上,将非结构化数据以对象方式操作的技术。支持XML、以分隔符分隔的字符串等非结构化数据 资源 InterSystems数据平台用于基于权限保护的对象,称之为资源。它包含被保护对象和需要的权限,例如对数据库User的读权限,就是一个资源 镜像 同Mirror 专业

#InterSystems 想法门户

21 帖子0 关注者

Daniel InterSystems Moreau

0 帖子0 评论
公告
Claire Zheng · 八月 19, 2021

InterSystems开发者竞赛:InterSystems IRIS Analytics

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems开发者竞赛:InterSystems IRIS Analytics 🏆 竞赛时间:2021年8月23日-9月12日 奖金总额: $8,750 登录页面即可参赛: https://contest.intersystems.com 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 8月23日 - 9月5日: 应用开发、提交阶段 ✅ 9月 6日 - 12日: 投票阶段 注意:在整个参赛期间(开发与投票期间,即8月23日-9月12日),开发者可持续编辑、提升其应用 主题 💡 应用InterSystems IRIS开发分析解决方案(Analytics Solution) 💡 使用一个或多个InterSystems IRIS分析功能,如: Adaptive Analytics 自适应分析(AtScale) InterSystems Reports (Logi) InterSystems BI (DeepSee) InterSystems NLP (iKnow) 创造一个简单的、引人注目的、清晰的可视化产品和/或故事。 以下是参赛须知: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用应该在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上工作。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 资源助力 1. 示例应用程序和说明: 1.1. Adaptive Analytics(自适应分析): Adaptive Analytics in Action (视频) 1.2 InterSystems报告: A look at InterSystems Reports (视频) InterSystems Reports Resource guide Running InterSystems Reports in containers IRIS reports server demo (OEX) 1.3 IRIS BI 案例: IRIS Analytics Template Samples BI Covid19 analytics Analyze This Game of Throne Analytics Pivot Subscriptions Error Globals Analytics Creating InterSystems IRIS BI Solutions Using Docker & VSCode (视频) The Freedom of Visualization Choice: InterSystems BI (视频) InterSystems BI(DeepSee) Overview (线上课程) InterSystems BI(DeepSee) Analyzer Basics (线上课程) 1.4 InterSystems NLP (iKnow): iKnow Source Code Samples Aviation Set Analysis iKnow First Look (线上课程) 2. Sample数据: Hole Foods database for IRIS BI (与SamplesBI包一起安装) Adventure Works, zip Synthea 3. 将数据导入IRIS的工具: CSVGEN and CSVGENUI S3 External Table 4. IRIS初学者 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 5. 如何将您的APP提交给大赛 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 参赛评比 投票规则即将发布,敬请期待! So! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖 ❗️ 点击此处,查看 官方竞赛条款解读❗️
文章
Michael Lei · 四月 4, 2023

InterSystems SQL 小妙招

嗨开发者们! 如您所知,InterSystems IRIS 除了Global、对象、文档和 XML 数据模型还支持关系,其中 SQL 语言也被用来处理数据。 与其他关系型 DBMS 一样,InterSystems IRIS 有自己的特点。 我开始这篇文章是为了抛砖引玉,并邀请您分享您的小诀窍 - 我会根据收到的评论更新内容。 开始了! 列出数据库中的所有表: SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE= 'BASE TABLE' 感谢@Dmitry.Maslennikov 使用当前日期和当前时间作为默认值创建表: CREATE TABLE CUSTOMER ( ID INTEGER PRIMARY KEY NOT NULL , NAME VARCHAR ( 100 ) NOT NULL , PASSWORD VARCHAR ( 20 ) NOT NULL , LAST_UPDATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL , REGISTRATION_DATE DATE DEFAULT CURRENT_DATE NOT NULL ); 注意不带括号的函数 CURRENT_TIMESTAMP 和 CURRENT_DATE。 创建在内部使用 ObjectScript 的存储过程/函数: CREATE OR REPLACE FUNCTION IRIS_VERSION() RETURNS VARCHAR LANGUAGE OBJECTSCRIPT { Return $ZV } 调用存储过程/函数: select IRIS_VERSION() as "Version" 调用内部函数。 返回 IRIS 版本: Select $ version 返回当前命名空间: Select $namespace 欢迎大家在评论区留下你的小妙招! 分页查询: select top :row * from PatientInfo where id not in (select top 10(:page-1) id from PatientInfo order by id asc) order by id
公告
Claire Zheng · 一月 7, 2021

InterSystems 商业数字服务

亲爱的社区用户,您好! 我们在 Global Masters上推出了商业服务奖励计划,这是一个绝佳的契机,您可以在开发者社区和我们的社交媒体上宣传贵公司的应用、解决方案和服务,甚至为您的 OEX 应用兑换 Google AdWords 推广! $1,000 Google AdWords 推广代金券 兑换此奖励可在 Google Adwords 上推广您的 OEX 应用。我们将设置推广(关键字、描述、受众),并在推广结束后发送报告。 要求:应用程序应该在 InterSystems IRIS数据平台/IRIS医疗版 上工作,或是通过 IRIS 进行管理/开发的工具。 3,000 积分 开发者社区上的“NEWS”宣传块 兑换此奖励可在开发者社区上宣传您的服务、活动或职位空缺。时长:1 周。 显示在网站所有网页的右侧。 我们的设计人员将为您准备一个横幅。 要求:开发服务、活动或职位空缺应该与 InterSystems 技术相关。 1,500 积分 开发者社区上的 Open Exchange 项目推广 兑换此奖励可在开发者社区上推广您的 OEX 项目。1 周之内,所有社区访问者在网站所有网页右侧的“本周应用”板块中都会看到一个横幅,其中包含您的项目的可点击链接。 1,000 积分 InterSystems 支持的网络研讨会 如果您想针对开发者组织一次专业的网络研讨会,以介绍您的解决方案/工具和公司服务,那么请兑换此奖励,我们将帮忙组织。 您将获得:InterSystems 团队将建立一个在线网络研讨会;在 开发者社区和社交媒体上推广该网络研讨会;开发者社区上的登录页面;网络研讨会前演练和会议期间的技术支持。 要求:应用程序应该在 InterSystems IRIS数据平台/IRIS医疗版上工作,或是通过 IRIS 进行管理/开发的工具。 3,000 积分 让您的视频出现在 InterSystems 开发者 YouTube 频道上 您是否有描述InterSystems 数据平台相关的工具、解决方案或经验的YouTube 视频? 通过订购视频加速包提高您的 YouTube 视频流量:在 InterSystems 开发者 YouTube 频道上推广视频。 列入每月的“InterSystems 开发者视频”摘要。 这是一个示例。 在 Global Masters 和 InterSystems 开发者社交媒体上宣传。 1,500 积分 在开发者社区上发布您公司的标签 兑换此奖励可获得您公司在开发者社区上的标签,它也是一种公司描述,一个包含帖子和您的订阅者的区域。 5,000 积分 如果您还不是 Global Masters 会员,如何兑换? ➡️ 我们邀请您加入: 1. 使用您在开发者社区上的相同账密登录Global Masters 。 2. 回答“自定义你的程序。 从这里开始!”挑战中的 4 个问题(您会在挑战中看到)。 3. 您对 OEX 和开发者社区的贡献积分将在 3 天内自动授予。 4. 在奖励目录兑换奖励。 InterSystems 开发者社区每个月的访问量超过 35000 人。让世界了解您在 InterSystems 数据平台上构建的应用、解决方案和服务! 欢迎在下面的评论中提出您的问题。 * * * 有关 Global Masters 的其他信息:认识Global Masters倡导中心,从这里开始 欢迎几位把你们的相关单位和产品介绍发布出来,展现给全球客户。 @jingqi LIu @Weiwei Yang @Deming Xu @Botai Zhang @姚.鑫
文章
姚 鑫 · 二月 28, 2021

第一章 InterSystems SQL简介

# 第一章 InterSystems SQL简介 InterSystems SQL提供对InterSystems IRIS®Data Platform数据库中存储的数据的无懈可击的标准关系访问。 InterSystems SQL提供以下优势: - 高性能和可扩展性-InterSystems SQL提供优于其他关系数据库产品的性能和可扩展性。此外,InterSystems SQL可以在各种硬件和操作系统上运行;从笔记本电脑到高端多CPU系统。 - 与InterSystems IRIS对象技术集成-InterSystems SQL与InterSystems IRIS Object技术紧密集成。可以混合使用关系访问和对象访问数据,而不会牺牲任何一种方法的性能。 - 维护成本低-与其他关系数据库不同,InterSystems IRIS应用程序不需要在已部署的应用程序中重建索引和压缩表格。 - 支持标准SQL查询-InterSystems SQL支持SQL-92标准语法和命令。在大多数情况下,可以毫不费力地将现有关系应用程序迁移到InterSystems IRIS,并自动利用InterSystems IRIS更高的性能和对象功能。 可以将InterSystems SQL用于多种目的,包括: - 基于对象和基于Web的应用程序-可以在InterSystems IRIS对象和Web Server Page应用程序中使用SQL查询来执行强大的数据库操作,如查找和搜索。 - 在线事务处理-InterSystems SQL为INSERT和UPDATE操作以及事务处理应用程序中常见的查询类型提供了出色的性能。 - 商业智能和数据仓库-InterSystems IRIS多维数据库引擎和位图索引技术的结合使其成为数据仓库式应用程序的最佳选择。 - 即时查询和报告-可以使用InterSystems SQL附带的功能齐全的ODBC和JDBC驱动程序连接到流行的报告和查询工具。 - 企业应用程序集成-InterSystems SQL Gateway使能够无缝地通过SQL访问ODBC或JDBC兼容的外部关系数据库中存储的数据。这使得在InterSystems IRIS应用程序中集成来自各种来源的数据变得容易。 # 架构 InterSystems SQL的核心由以下组件组成: - 统一数据字典-存储为一系列类定义的所有元信息的存储库。InterSystems IRIS自动为统一字典中存储的每个持久类创建关系访问(表)。 - SQL处理器和优化器-一组程序,用于解析和分析SQL查询,确定给定查询的最佳搜索策略(使用复杂的基于成本的优化器),并生成执行查询的代码。 - InterSystems SQL Server-一组InterSystems IRIS服务器进程,负责与InterSystems ODBC和JDBC驱动程序的所有通信。它还管理频繁使用的查询的高速缓存;当同一查询被多次执行时,可以从查询高速缓存中检索其执行计划,而不必由优化器再次处理。 ## 特点 InterSystems SQL包括一整套标准的关系型功能。这些措施包括: - 定义表和视图(DDL或数据定义语言)的能力。 - 对表和视图(DML或数据操作语言)执行查询的能力。 - 能够执行事务,包括插入、更新和删除操作。执行并发操作时,InterSystems SQL使用行级锁。 - 为更高效的查询定义和使用索引的能力。 - 能够使用各种数据类型,包括用户定义的类型。 - 定义用户和角色并为其分配权限的能力。 - 定义外键和其他完整性约束的能力。 - 定义INSERT、UPDATE和DELETE触发器的能力。 - 定义和执行存储过程的能力。 - 能够以不同的格式返回数据:用于客户端访问的ODBC模式;用于在基于服务器的应用程序中使用的显示模式。 ## 符合SQL-92 SQL-92标准在算术运算符优先级方面是不精确的;关于这一问题的假设因SQL实现而异。InterSystems SQL支持将系统配置为以下任一系统范围的SQL算术运算符优先级替代方案: - InterSystems SQL可以配置为严格按照从左到右的顺序解析算术表达式,没有运算符优先级。这与ObjectScript中使用的约定相同。因此,3+3*5=30。可以使用括号来强制执行所需的优先顺序。因此,3+(3*5)=18。 - InterSystems SQL可以配置为使用ANSI优先级分析算术表达式,这为乘法和除法运算符提供了比加法、减法和串联运算符更高的优先级。因此,3+3*5=18。如果需要,可以使用括号覆盖此优先级。因此,(3+3)*5=30。 SQL运算符优先级的默认值取决于InterSystems IRIS版本。 InterSystems SQL支持完整的入门级SQL-92标准,但有以下例外: - 不支持向表定义添加附加的CHECK约束。 - 不支持SERIALIZABLE(序列化)隔离级别。 - 分隔标识符不区分大小写;标准规定它们应该区分大小写。 - 在HAVING子句中包含的子查询中,应该能够引用该HAVING子句中“可用”的聚合。这不受支持。 ## 拓展 - InterSystems SQL支持许多有用的扩展。其中许多都与InterSystems IRIS提供对数据的同步对象和关系访问这一事实有关。 其中一些扩展包括: - 支持用户可定义的数据类型和函数。 - 以下对象引用的特殊语法。 - 支持子类化和继承。 - 支持对存储在其他数据库中的外部表进行查询。 - 用于控制表的存储结构以实现最高性能的多种机制。 ## 互操作性 - InterSystems SQL支持多种与其他应用程序和软件工具互操作的方法。 ## JDBC InterSystems IRIS包括一个符合标准的第4级JDBC客户机(全部是纯Java代码)。 InterSystems JDBC驱动程序提供以下特性: - 高性能 - 纯JAVA代码实现 - UNICODE支持 - 线程安全 可以将InterSystems JDBC与任何支持JDBC的工具、应用程序或开发环境一起使用。 ## ODBC InterSystems SQL的c语言调用级接口是ODBC。与其他数据库产品不同,InterSystems ODBC驱动程序是一个本机驱动程序——它不是构建在任何其他专有接口之上的。 InterSystems ODBC驱动程序提供以下功能: - 高性能 - 可移植性 - 原生Unicode支持 - 线程安全 可以将InterSystems ODBC与支持ODBC的任何工具,应用程序或开发环境一起使用。 ## 嵌入式SQL 在ObjectScript中,InterSystems SQL支持嵌入式SQL: **将SQL语句放置在方法(或其他代码)主体中的能力。使用嵌入式SQL,可以查询单个记录,或定义一个游标,然后使用该游标查询多个记录。嵌入式SQL已编译。默认情况下,它是在第一次执行(运行时)时进行编译的,而不是在包含它的例程进行编译时进行的。因此,在运行时检查SQLCODE错误很重要。** 还可以与包含嵌入式SQL的ObjectScript例程同时编译嵌入式SQL。 与InterSystems IRIS的对象访问功能结合使用时,嵌入式SQL的功能非常强大。例如,以下方法查找具有给定Name值的记录的RowID: ``` /// w ##class(PHA.TEST.SQL).FindByName("姚鑫") ClassMethod FindByName(fullname As %String) { &sql(SELECT %ID INTO :id FROM Sample.Person WHERE Name = :fullname) IF SQLCODE < 0 { SET baderr="SQLCODE ERROR:"_SQLCODE_" "_%msg RETURN baderr } ELSEIF SQLCODE = 100 { SET nodata="Query returns no data" RETURN nodata } RETURN "RowID="_id } ``` ``` DHC-APP>w ##class(PHA.TEST.SQL).FindByName("姚鑫") RowID=6 ``` 注意: 如果 Name 查处多条的话 id为查询的第一条数据 指定倒序,为最后一条。 ``` &sql(SELECT %ID INTO :id FROM Sample.Person WHERE Name = :fullname order by ID desc) ``` ``` DHC-APP>w ##class(PHA.TEST.SQL).FindByName("姚鑫") RowID=14 ``` ![image](/sites/default/files/inline/images/tu_pian__0.png) # 动态SQL 作为其标准库的一部分,InterSystems IRIS提供了一个%SQL.Statement类,可以使用它来执行动态(即在运行时定义的)SQL语句。可以在ObjectScript方法中使用动态SQL。例如,下面的方法查询指定数量的21世纪出生的人。该查询选择1999年12月31日之后出生的所有人,按出生日期对所选记录进行排序,然后选择前x条记录: ``` /// w ##class(PHA.TEST.SQL).Born21stC("姚鑫") ClassMethod Born21stC(x) { /// w ##class(PHA.TEST.SQL).Born21stC("1") ClassMethod Born21stC(x) { SET myquery=2 SET myquery(1) = "SELECT TOP ? Name,%EXTERNAL(DOB) FROM Sample.Person " SET myquery(2) = "WHERE DOB > 58073 ORDER BY DOB" SET tStatement = ##class(%SQL.Statement).%New() SET qStatus = tStatement.%Prepare(.myquery) IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT} SET rset = tStatement.%Execute(x) DO rset.%Display() WRITE !,"End of data" q "" } ``` ``` DHC-APP>w ##class(PHA.TEST.SQL).Born21stC("2") Name Expression_2 Ingrahm,Susan N. 02/10/2001 Goldman,Will H. 09/22/2002 2 Rows(s) Affected End of data ``` 准备查询时,该查询的优化版本将存储为缓存查询。该缓存查询被执行用于查询的后续调用,从而避免了每次执行查询时重新优化查询的开销。 ## 限制 请注意InterSystems SQL的以下限制: NLS可用于为单个全局变量以及当前运行的进程中的局部变量指定特定国家区域设置行为的$ORDER行为。InterSystems SQL可以在任何国家语言环境中使用和良好地工作。然而,InterSystems SQL当前的一个限制是,对于任何特定进程,它引用的所有相关全局变量都必须使用与当前进程区域设置相同的国家区域设置。 文章写得非常棒!学习! 学习到新知识sql动态查询,感谢!
文章
姚 鑫 · 三月 1, 2021

第二章 InterSystems SQL基础

# 第二章 InterSystems SQL基础 本章概述了InterSystems SQL的特性,特别是那些SQL标准未涵盖的特性,或者与InterSystems IRIS®数据平台统一数据架构相关的特性。 本教程假定读者具备SQL知识,并不是为介绍SQL概念或语法而设计的。 本章讨论以下主题: - 表 - 查询 - 权限 - 数据显示选项 - 数据排序类型 - 执行SQL # 表 在InterSystems SQL中,数据显示在表中。每个表都包含许多列。一个表可以包含零个或多个数据值行。以下术语大体上等效: 数据术语 | 关系数据库术语| InterSystems IRIS术语 ---|---|--- 数据库 | 架构| 包 数据库 | 表 | persistent class(持久类) 字段 | 列 | 属性 记录 | 行 | 表有两种基本类型:基表(包含数据,通常简称为表)和视图(基于一个或多个表提供逻辑视图)。 ## 模式与架构 SQL模式提供了一种将相关表,视图,存储过程和缓存查询的集合进行分组的方法。模式的使用有助于防止表级别的命名冲突,因为表,视图或存储过程的名称在其模式内必须唯一。应用程序可以在多个架构中指定表。 SQL模式与持久性类包相对应。通常,模式与其相应的程序包具有相同的名称,但是由于不同的模式命名约定或故意指定了不同的名称,因此这些名称可能有所不同。模式到程序包的映射在SQL到类名的转换中有进一步描述。 **模式是在特定的名称空间中定义的。模式名称在其名称空间内必须是唯一的。将第一个项目分配给它时,会自动创建一个模式(及其对应的程序包),从中删除最后一个项目时,会自动将其删除。** 可以指定一个限定或不限定的SQL名称,限定名称指定模式:schema.name。 非限定名不指定模式名。 如果不指定模式,InterSystems IRIS将提供如下模式: - 对于DDL操作,InterSystems IRIS使用系统范围的默认架构名称。此默认值可配置。它适用于所有名称空间。 - 对于DML操作,InterSystems IRIS可以使用用户提供的模式搜索路径或系统范围内的默认模式名称。在动态SQL,嵌入式SQL和SQL Shell中,使用了不同的技术来提供模式搜索路径。 DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition language): DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用 DCL(Data Control Language): 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL 要查看名称空间内的所有现有模式,请执行以下操作: 1. 在管理门户中,选择“系统资源管理器”,然后选择“ SQL”。使用页面顶部的Switch选项选择一个名称空间;这将显示可用名称空间的列表。选择一个名称空间。 ![image](/sites/default/files/inline/images/tu_pian__1.png) ![image](/sites/default/files/inline/images/2_12.png) 2. 选择屏幕左侧的Schema下拉列表。这将显示当前名称空间中的架构列表。从该列表中选择一个模式;所选名称将出现在“模式”框中。 ![image](/sites/default/files/inline/images/3_10.png) 3. 如果有数据下拉列表允许选择表,视图,过程或缓存的查询,或所有属于模式的所有这些。设置此选项后,单击三角形以查看项目列表。如果没有项目,则单击三角形无效。 ![image](/sites/default/files/inline/images/4_4.png) # 查询 在InterSystems SQL中,可以通过查询查看和修改表中的数据。粗略地说,查询有两种形式:查询数据(SELECT语句)和修改数据(INSERT,UPDATE和DELETE语句)。 可以通过多种方式使用SQL查询: - 在ObjectScript中使用嵌入式SQL。 - 在ObjectScript中使用动态SQL。 - 调用使用CREATE PROCEDURE或CREATE QUERY创建的存储过程。 - 使用类查询。 - 使用来自各种其他环境的ODBC或JDBC接口。 # 权限 InterSystems SQL提供了一种通过权限来限制对表、视图等的访问的方法。 # 数据显示选项 InterSystems SQL使用SelectMode选项来指定如何显示或存储数据。 可用的选项有Logical、Display和ODBC。 数据在内部以逻辑模式存储,并且可以在这些模式中的任何一种中显示。 通过使用`LogicalToDisplay()`、`LogicalToODBC()`、`DisplayToLogical()`和`odbcological()`方法,每个数据类型类都可以在内部逻辑格式和显示格式或ODBC格式之间进行转换。 当显示SQL SelectMode时,将应用LogicalToDisplay转换,并对返回值进行格式化以便显示。 默认的SQL SelectMode是逻辑的; 因此,默认情况下返回值以存储格式显示。 SelectMode影响查询结果集数据显示的格式,SelectMode还影响应该提供数据值的格式,例如在WHERE子句中。 InterSystems IRIS根据存储模式和指定的SelectMode选择合适的转换方法。 所提供的数据值与SelectMode之间的不匹配可能导致错误或错误的结果。 例如,如果`DOB`是一个以`$HOROLOG`逻辑格式存储的日期,并且WHERE子句指定`DOB > 2000-01-01 `(ODBC格式),则SelectMode = ODBC返回预期的结果。 `SelectMode = Display`生成`SQLCODE -146`,无法将日期输入转换为有效的逻辑日期值。 `SelectMode =Logic`将 `2000-01-01`解析为逻辑日期值,并返回零行。 对于大多数数据类型,三种SelectMode模式返回相同的结果。 以下数据类型受SelectMode选项影响: - 日期,时间和时间戳数据类型。 InterSystems SQL支持多种日期,时间和时间戳数据类型(`%Library.Date`,`%Library.Time`,`%Library.PosixTime`,`%Library.TimeStamp`和`%MV.Date`)。除`%Library.TimeStamp`外,这些数据类型对逻辑,显示和ODBC模式使用不同的表示形式。在其中的几种数据类型中,InterSystems IRIS以`$HOROLOG`格式存储日期。此逻辑模式内部表示包括从任意起始日期(1840年12月31日)起的天数的整数,逗号分隔符以及从当天午夜开始的秒数的整数。 InterSystems IRIS将`%PosixTime`时间戳存储为编码的64位带符号整数。在“显示”模式下,日期和时间通常以数据类型的FORMAT参数指定的格式显示,或者当前语言环境的日期和时间格式默认为`%SYS.NLS.Format`。美国语言环境的默认值为`DD / MM / YYYY hh:mm:ss`。在ODBC模式下,日期和时间始终表示为`YYYY-MM-DD hh:mm:ss.fff`。 `%Library.TimeStamp`数据类型还将这种ODBC格式用于逻辑和显示模式。 - `%LIST`数据类型。InterSystems IRIS逻辑模式使用两个非打印字符存储列表,这两个字符出现在列表中的第一个项目之前,并显示为列表项目之间的分隔符。在ODBC SelectMode中,列表项显示时列表项之间带有逗号分隔符。在Display SelectMode中,列表项显示时,列表项之间有空格分隔符。 - 指定`VALUELIST`和`DISPLAYLIST`的数据类型。如果处于显示模式,并且在字段具有`DISPLAYLIST`的表中插入一个值,则输入的显示值必须与`DISPLAYLIST`中的一项完全匹配。 - 空字符串和空BLOB(流字段)。在逻辑模式下,空字符串和BLOB由非显示字符`$CHAR(0)`表示。在显示模式下,它们由空字符串(“”)表示。 SQL SelectMode可以指定如下: - 对于当前进程,请使用`$SYSTEM.SQL.SetSelectMode()`。 - 对于InterSystems SQL Shell会话,请使用SET SELECTMODE命令。 - 使用“显示模式”下拉列表,从管理门户“执行查询”用户界面(系统资源管理器,SQL)获得查询结果集。 - 对于动态SQL `%SQL.Statement`实例,请使用`%SelectMode`属性。 - 对于嵌入式SQL,请使用ObjectScript `#SQLCompile` Select预处理器指令设置。该伪指令允许使用第四个值Runtime,它将选择模式设置为RuntimeMode属性设置为:逻辑,显示或ODBC。 RuntimeMode的默认值为Logical。 - 对于使用SELECTMODE关键字的SQL命令CREATE QUERY,CREATE METHOD,CREATE PROCEDURE和CREATE FUNCTION。 - 通过使用`%EXTERNAL`,`%INTERNAL`和`%ODBCOUT`函数在SQL查询中的单个列。 # 数据排序 Collation种类决定了值的排序和比较方式,它是InterSystems SQL和InterSystems IRIS对象的一部分。 **可以指定排序规则类型作为字段/属性保护的一部分。除非另有说明,否则字符串字段/属性默认为命名空间默认排序规则。默认情况下,字符串的命名空间默认排序规则是SQLUPPER。 SQLUPPER排序规则将字符串转换为大写,以便排序和比较。因此,除非另有说明,字符串排序和比较不区分大小写。** 可以指定排序规则类型作为索引保护的一部分,或者使用索引字段的排序规则类型。 通过将排序函数应用于字段名,SQL查询可以覆盖未保护的字段/属性排序规则类型。ORDER BY子句指定查询的结果集序列;如果指定的字符串字段被保护为SQLUPPER,查询结果顺序不区分大小写。 # 执行SQL InterSystems IRIS支持多种方法来编写和执行SQL代码。其中包括: - 嵌入式SQL:嵌入在ObjectScript代码中的SQL代码。 - 动态SQL:使用`%SQL.Statement`类从ObjectScript中执行的SQL代码。 - `Execute()`方法:使用`%SYSTEM.SQL`类的`Execute()`方法执行SQL代码。 - 包含SQL代码的存储过程,使用CREATE PROCEDURE或CREATE Query创建。 - SQL Shell:从终端界面执行的SQL语句。 - 执行查询界面:从管理门户执行的SQL语句。 可以使用InterSystems IRIS对象(类和方法)执行以下操作: - 持久性类(SQL表)。 - 定义索引。 - 定义并使用类查询。 关于动态SQL能再详细说说吗? 实用帖,非常好的学习知识,感谢!