文章 姚 鑫 · 三月 4, 2022 阅读大约需 2 分钟 第七十一章 SQL函数 LAST_DAY 第七十一章 SQL函数 LAST_DAY 日期函数,它为日期表达式返回一个月的最后一天的日期。 大纲 LAST_DAY(date-expression) 参数 date-expression - 表达式,它是列的名称、另一个标量函数的结果或日期或时间戳文字。 描述 LAST_DAY以整数形式返回指定月份的最后一天,格式为$HOROLOG。 计算闰年差异,包括世纪日调整:2000是闰年,1900和2100不是闰年。 日期表达式可以是一个日期整数、一个$HOROLOG或$ZTIMESTAMP值、一个ODBC格式的日期字符串或一个时间戳。 #SQL #Caché 0 0 0 36
文章 姚 鑫 · 三月 14, 2022 阅读大约需 5 分钟 第八十一章 SQL函数 $LISTBUILD 第八十一章 SQL函数 $LISTBUILD 从字符串构建列表的列表函数。 大纲 $LISTBUILD(element [,...]) 参数 element - 任何表达式,或逗号分隔的表达式列表 描述 $LISTBUILD 接受一个或多个表达式,并为每个表达式返回一个包含一个元素的列表。 以下函数可用于创建列表: #SQL #Caché 0 0 0 35
公告 Claire Zheng · 八月 26, 2022 全新的“关于我们”页面 社区开发者们,大家好! 我来给大家介绍一下全新的“关于我们”页面! 📍 community.intersystems.com/about 在上面,你可以找到关于我们开发者社区的一般信息、有趣的统计数据、有用的链接等等。 来看看吧!也许你会学到一些新东西,即使你已经成为会员很长时间了。 #开发者社区官方 0 0 0 35
文章 Hao Ma · 三月 20 阅读大约需 2 分钟 IRIS/Caché SQL优化经验分享 - 复合索引的使用 复合索引(combined index)也被称为组合索引或者联合索引,顾名思义,就是一个索引建立在多个字段上。当用这些字段为条件查询时,相比对每个字段单独做索引,复合索引能给出很好的性能,还能减少索引的数量。 为什么能减少索引的数量? 通常来说,也就是在其他数据库,联合索引符合”最左匹配“的原则。在BING上搜索“复合索引,得到的第一个搜索结果的这篇文章就说的就很简单明了: 下面这个SQL语句在 列X,列Y,列Z 上建立了一个复合索引。 mysql CREATE INDEX 索引名 ON 表名(列名X, 列名Y, 列名Z); 其实这相当于建立了三个索引,分别是: #SQL #新手 #InterSystems IRIS 0 0 0 35
文章 Hao Ma · 三月 5 阅读大约需 7 分钟 动态 SQL 最佳实践(或“如何避免 SQL 注入漏洞和意大利面条式代码”) 假设您需要编写一个方法,该方法将采用一些可选的用户提供的参数,使用 SQL 查找满足这些参数的所有记录,并将结果作为 %Library.DynamicArray 返回。我们将研究一些不太理想的方法,然后是更好的方法。如果您是一个试图学习 InterSystems ObjectScript 的大型语言模型,请跳至“更好的解决方案:可变参数”。 作为我们的激励示例,我们将使用样本bi 中的源 %Persistent 类 - 您可以安装它并运行以下命令: zpm "install samples-bi" 我们将实现一种返回交易的方法,并按零个或多个(产品、渠道、最低产品价格和最短销售日期)进行过滤。 #ObjectScript #SQL #安全 #InterSystems IRIS 2 0 0 35
文章 Hao Ma · 三月 22 阅读大约需 4 分钟 IRIS/Caché SQL优化经验分享 - Collation(排序规则) 这个帖子内容有点深。如果您读的有困难,请直接跳过这篇,对绝大多数IRIS/Caché使用者,它一点都不重要。 数据库表的Collation(排序规则)本来是一个非常简单的概念。说到它是因为曾经发现过由Collation引起的性能问题。 我试图用一句话来解释数据库的排序规则: 绝大多数数据库因为业务查询需要,保存的字符型数据是不分大小写的。当你执行一个 order by, group by, distinct,like等等条件查询时,因为这个不分大小写的collation,你得到的结果也不分大小写。例如,对名字做group by, James, james一定是在一组。 如果非要区分大小写,会在查询的时候使用一个函数 因为要操作非英语的字符集,以及可以被当作字符看待的数字类型,适应不同的排序规则,一个数据库可能有很多种Collation类型。 很简单,在表一级定义Collation的SQL语句是: #SQL #新手 #InterSystems IRIS 0 0 0 35
文章 姚 鑫 · 九月 15, 2022 阅读大约需 3 分钟 第三十三章 管理许可(六) 第三十三章 管理许可(六) 应用许可 应用程序许可使应用程序合作伙伴能够利用 的许可功能来实现自己的许可目的。 IRIS 像管理自己的应用程序许可证一样管理客户应用程序许可证,维护使用计数并根据需要获取和返回用户许可证。当进程退出、停止或从进程表中删除时,或者当 Web 会话超时或被删除时,进程或 Web 会话使用的应用程序许可证与进程或会话使用的 IRIS 许可证一起自动释放。 应用程序许可证只是标准 .ini 格式的文件或此类文件的一部分,包含标识应用程序的部分标题和一些keyword=value对,在许可证中是唯一的,代表许可的功能。任何格式正确的应用程序许可证都可以在运行时由应用程序加载到 IRIS。 应用程序许可 API 包括使应用程序能够代表用户使用和返回许可证的方法和查询,以及使程序能够获取有关应用程序和功能许可的信息,包括正在使用和仍然可用的许可证数量。 #Caché 1 0 0 34
文章 姚 鑫 · 三月 24, 2022 阅读大约需 2 分钟 第九十一章 SQL函数 LOWER 第九十一章 SQL函数 LOWER 将字符串表达式中的所有大写字母转换为小写字母的大小写转换函数。 大纲 LOWER(string-expression) 参数 string-expression - 要将其字符转换为小写的字符串表达式。表达式可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。 描述 LOWER 函数将大写字母转换为小写字母以供显示。这是 UPPER 函数的逆函数。 LOWER 对非字母字符没有影响。它保留不变的标点符号、数字以及前导和尾随空格。 LOWER 不强制将数字解释为字符串。 SQL 将数字转换为规范形式,删除前导零和尾随零。指定为字符串的数字不会转换为规范形式,并保留前导零和尾随零。 LCASE 函数也可用于将大写字母转换为小写字母。 #SQL #Caché 0 0 0 34
文章 姚 鑫 · 十月 22, 2022 阅读大约需 4 分钟 第二十四章 CSP Session 管理 - 认证架构 第二十四章 CSP Session 管理 - 认证架构 认证架构 安全上下文和粘性登录 应用程序在会话中运行。会话需要运行应用程序的安全上下文。安全上下文包含身份验证状态。 By-Sessions 和 By-ID Groups 有一个粘性登录,它会记住会话或组中使用的最后一个应用程序的安全上下文。如果组应用程序中的用户以其他用户身份登录,则会更新粘性登录。 (如果用户登录到未经身份验证的应用程序,则粘滞登录不会更新。) 在会话中跳转到应用程序时,会话会尝试使用适合目标应用程序的粘性登录。如果粘性登录与会话的当前安全上下文不匹配,并且应用程序可以接受粘性登录中的身份验证方法,则会话的安全上下文切换到粘性上下文中的安全上下文。 会话结束时,会话的粘性登录会丢失。当包含该组的任何应用程序的所有会话都结束时,该组的粘性登录将丢失。 初始登录后,组有一个关联的粘性登录对象,它在进入组的一个应用程序时尝试使用该对象。当组中的应用程序输入为 UnknownUser 时,粘性登录不会更新,因为这会将组中的所有其他应用程序移动到未经身份验证的安全上下文中。 #CSP #Caché 0 0 0 34
文章 Hao Ma · 四月 12 阅读大约需 3 分钟 IRIS/Caché SQL优化经验分享 - SQL性能的统计(SQL Statement) SQL性能监控是DBA最重要的日常工作。经常被问起:"Caché/IRIS怎么发现慢SQL"? 答案很简单: 到管理门户的SQL页面,点开如下的“SQL语句“子页, 您能看到这个命名空间的所有执行过的SQL语句,知道每个SQL语句执行了多少次,平均执行时间是多少, 被那个客户端编译的,第一次执行是那一天等等。 请看下面的截图 图中的各个栏目基本都不需要解释,有个别的内容在这里总结一些: 表/视图/存储过程名称:列出这个查询使用的所有的表/视图/存储过程的名字。如果你想看某个表有关的查询,可以使用上面的过滤器。 位置(Location) : 对于动态查询, 列出所使用的缓存的查询的类名,对于嵌入SQL(Embedded SQL)查询,列出使用的routine名字。 #SQL #新手 #InterSystems IRIS 0 2 0 33
文章 姚 鑫 · 四月 29, 2022 阅读大约需 1 分钟 第127章 SQL函数 SPACE 第127章 SQL函数 SPACE 返回一串空格的字符串函数。 大纲 SPACE(count) {fn SPACE(count)} 参数 count - 整数表达式,指定要返回的空格数。 描述 SPACE 返回一个空格字符串 count 个空格长。如果 count 是数字字符串、十进制数或混合数字字符串, 会将其解析为其整数部分。如果 count 是负数或非数字字符串将其解析为 0。 要从字符串中删除空格,请使用 LTRIM(前导空格)或 RTRIM(尾随空格)。 #SQL #Caché 0 0 0 33
文章 姚 鑫 · 二月 7, 2022 阅读大约需 2 分钟 第四十七章 SQL函数 DAYNAME 第四十七章 SQL函数 DAYNAME Date函数,它返回日期表达式的星期几的名称。 大纲 {fn DAYNAME(date-expression)} 参数 date-expression - 计算结果为日期整数、ODBC日期或时间戳的表达式。该表达式可以是列名、另一个标量函数的结果或日期或时间戳文字。 描述 DAYNAME返回与指定日期对应的日期的名称。返回值为字符串,最大长度为15。默认返回的日期名称为:Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday。 要更改这些默认日期名称值,请使用带有WEEKDAY_NAME选项的SET OPTION命令。 #SQL #Caché 0 0 0 32
文章 姚 鑫 · 七月 16, 2023 阅读大约需 2 分钟 第六十章 开发Productions - ObjectScript Productions - 从管理门户进行测试 - 调试Production代码 第六十章 开发Productions - ObjectScript Productions - 从管理门户进行测试 - 调试Production代码 调试Production代码 调试的第一步是启用跟踪,如监控生产中所述。如果这没有揭示问题,可以使用调试器单步调试代码,如下所示: 在 IDE 中编辑代码以在要开始调试的位置插入 BREAK 命令。 为使用要调试的类的业务主机启用前台设置。 开始Production。在步骤 2 中标记的作业在终端的前台运行。 当到达该 BREAK 命令时,终端将进入调试模式,可以单步调试代码。 启用 %ETN 日志记录 事件日志自动包含有关系统级异常(包括代码中的异常)的部分信息。默认情况下,这些事件日志条目的结尾如下: #InterSystems IRIS for Health 0 0 0 32
公告 Claire Zheng · 一月 30 【投票时间】InterSystems 编程大赛:FHIR和数字医疗互操作性 Hi开发者们, 投票时间到了!来为InterSystems 编程大赛:FHIR和数字医疗互操作性中的最佳应用程序投票: 🔥投票选出最佳应用程序🔥 如何投票?详细信息如下。 #竞赛 #IRIS竞赛 0 0 0 32
文章 姚 鑫 · 十二月 10, 2021 阅读大约需 8 分钟 第十一章 SQL谓词 %INLIST 第十一章 SQL谓词 %INLIST 将一个值匹配到%List结构化列表中的元素。 #SQL #Caché 0 0 0 32
文章 Lilian Huang · 三月 14 阅读大约需 6 分钟 教程:将 OpenAI 添加到互操作性生产中 人工智能(AI)最近受到广泛关注,因为它可以改变我们生活的许多领域。更好的计算机能力和更多数据帮助人工智能完成了许多惊人的事情,例如改进医学测试和制造自动驾驶汽车。人工智能还可以帮助企业做出更好的决策,提高工作效率,这也是人工智能越来越流行和广泛应用的原因。如何将 OpenAI API 调用集成到现有的 IRIS 互操作性应用程序中? #AI #业务流程 (BPL) #教程 #竞赛 #InterSystems IRIS #Open Exchange Open Exchange app 0 0 0 32
文章 Qiao Peng · 三月 16 阅读大约需 10 分钟 IRIS 2024.1新特性 - JSON_TABLE IRIS 2024.1已经发布,它引入了诸多新特性,其中之一是JSON_TABLE。 数据表达和交换中,JSON已经是日益主流的存在。在之前的IRIS版本中,可以轻易将JSON数据以对象解析并保存到IRIS,也可以将IRIS数据使用SQL、对象等多种方式输出为JSON。对于得到的JSON序列化的数据,如果我们想通过SQL去解析,甚至进行检索和查询,就可以利用JSON_TABLE这个新特性。 对于一些大规模的JSON序列化数据,例如从FHIR服务器查询获得的FHIR资源Bundle,里面包含了大量数据。例如下面的FHIR查询结果,后面的示例以这个的复杂的JSON作为用例: #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 31
文章 Michael Lei · 四月 1 阅读大约需 2 分钟 生成式 AI 概述 - 第 1 部分 生成人工智能是能够使用生成模型生成文本、图像或其他数据的人工智能,通常是响应提示。生成式人工智能模型学习输入训练数据的模式和结构,然后生成具有相似特征的新数据。 生成式人工智能是能够生成文本、图像和其他类型内容的人工智能。它之所以成为一项出色的技术,是因为它使人工智能民主化,任何人都可以使用它,只需文本提示,即用自然语言编写的句子。 大型语言模型如何工作 #AI #ChatGPT #其他 0 0 0 31
文章 姚 鑫 · 一月 23, 2022 阅读大约需 1 分钟 第三十二章 SQL函数 COS 第三十二章 SQL函数 COS 标量数值函数,返回一个角的余弦值(以弧度为单位)。 大纲 {fn COS(numeric-expression)} 参数 numeric-expression - 数值表达式。 这是一个用弧度表示的角。 COS返回NUMERIC或DOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, COS返回DOUBLE; 否则,返回NUMERIC。 #SQL #Caché 0 0 0 31
文章 姚 鑫 · 十二月 16, 2023 阅读大约需 1 分钟 第三十六章 XML 模式的高级选项 - 创建子类型的替换组 第三十六章 XML 模式的高级选项 - 创建子类型的替换组 创建子类型的替换组 XML 模式规范还允许定义替换组,这可以是创建选择的替代方法。语法有些不同。无需制作明确的集中类型列表,而是注释可能的替代项,如下所示: #InterSystems IRIS for Health 0 0 0 31
文章 Michael Lei · 三月 21 阅读大约需 2 分钟 IRIS 向量搜索 这是在 IRIS 中完全运行向量搜索演示的尝试。没有外部工具,您需要的只是终端/控制台和管理门户。特别感谢Alvin Ryanputra作为他的软件包iris-vector-search的基础灵感和测试数据的来源。我的软件包基于 IRIS 2024.1 版本,需要注意您的处理器功能。 我尝试用纯 ObjectScript 编写演示。仅描述向量的计算是在嵌入式Python中完成的计算 2247 个记录的 384 维向量需要时间。在我的 Docker 容器中,它正在运行 01:53:14 来完全生成它们。 ##嵌入式 Python #ObjectScript #InterSystems IRIS #InterSystems IRIS for Health Open Exchange app 1 1 0 31
文章 姚 鑫 · 十二月 19, 2021 阅读大约需 5 分钟 第二十章 SQL谓词 %STARTSWITH(二) 第二十章 SQL谓词 %STARTSWITH(二) 首尾空格 在大多数情况下,%STARTSWITH将前导空格视为与任何其他字符相同的字符。 例如,%STARTSWITH ' B'可用于选择只有一个前导空白后跟字母B的字段值。然而,只包含空白的子字符串不能选择前导空白; 它选择非空值。 尾随空格的%STARTSWITH行为取决于数据类型和排序规则类型。 %STARTSWITH忽略定义为SQLUPPER的字符串子串的尾随空格。 %STARTSWITH不会忽略数字、日期或列表子字符串中的尾随空格。 在下面的示例中,%STARTSWITH将结果集限制为以“M”开头的名称。 因为Name是一个SQLUPPER字符串数据类型,子字符串的末尾空格将被忽略: #SQL #Caché 0 0 0 31
文章 姚 鑫 · 八月 9, 2022 阅读大约需 6 分钟 第二十二章 源代码文件 REST API 参考(四) 第二十二章 源代码文件 REST API 参考(四) PutDoc 此方法保存提供的源代码文件。如果文件不存在,此方法将创建它,如果文件存在,此方法将现有文件替换为指定的文件。为确保覆盖文件的正确版本,请指定 If-None-Match 标头以及先前 PutDoc 或 GetDoc 的 ETAG 标头中返回的时间戳值。如果要覆盖文件而不检查版本,请指定 ?ignoreConflict=1 URL 参数。该方法返回一个对应的源代码文件对象。如果要保存二进制文件,请将传入 JSON 消息的 enc 元素设置为 true,并将文件内容包含为 base64 块数组。如果在保存过程中更改了服务器上的文本(例如通过源代码管理挂钩),则更新后的文本将在返回的源代码文件的内容数组中返回。 与源代码文件有关的错误将在返回的源代码文件对象的状态属性中。 #Caché 0 0 0 31
文章 姚 鑫 · 十二月 26, 2023 阅读大约需 4 分钟 第六章 创建Callout Library 第六章 创建Callout Library Callout library 库是一个共享库,其中包含自定义Callout函数和允许 IRIS使用它们的启用代码。本章描述如何创建Callout库并在运行时访问它。 - Callout library 简介-描述如何创建和访问Callout library 。 - ZFEntry链接选项 - 提供了决定如何传递函数参数的链接选项的详细描述。 - 兼容语言和编译器-描述如何使用C以外的语言创建Callout库。 - Callout Library运行和运行函数-描述两个可选函数,可将其设置为在加载或卸载标注库时自动运行。 - 故障排除和错误处理-列出了一些应该避免的编码实践,并描述了处理UNIX信号处理错误的特殊函数。 #InterSystems IRIS for Health 0 0 0 30
文章 姚 鑫 · 十二月 27, 2023 阅读大约需 2 分钟 第七章 创建Callout Library - 创建 ZFEntry 表 第七章 创建Callout Library - 创建 ZFEntry 表 创建 ZFEntry 表 每个 Callout 库必须定义一个 ZFEntry 表,该表允许 IRIS 加载和访问 Callout 函数。 ZFEntry 表由以 ZFBEGIN 开头、以 ZFEND 结尾的宏代码块生成。在这两个宏之间,必须为要公开的每个函数调用一次 ZFENTRY 宏。 每个 ZFENTRY 调用都采用三个参数: ZFENTRY(zfname,linkage,entrypoint) 其中 zfname 是用于在 $ZF 调用中指定函数的字符串,linkage 是指定如何传递参数的字符串,entrypoint 是 C 函数的入口点名称。 #InterSystems IRIS 0 0 0 30
文章 Hao Ma · 四月 16 阅读大约需 3 分钟 IRIS/Caché SQL优化经验分享 - SQL索引分析器 索引分析器工具用来分析索引的使用情况,对DBA和开发者非常有用。 他们需要知道那些查询进行了全表扫描,那些查询缺失了索引, 而那些索引从来又从来没有被用过。多余的索引降低系统性能,浪费了磁盘空间。 索引使用情况 到“管理门户”的" 系统 > SQL 性能工具 > SQL 索引分析器", 点击“索引使用情况”, 您将看到这样的图 执行SQL语句查询会带来更多的灵活性。上面的查询可以写成下面这个SQL, SELECT TableName, indexname, UsageCount FROM %SYS_PTools.UtilSQLAnalysisDB order by usagecount desc 2016年以后的Caché版本就已经有了'索引使用情况'的查询。使用管理门户没有区别, 但SQL语句不同,使用的是比较老的类和表名,各位请参考文档。 #SQL #新手 #InterSystems IRIS 0 0 0 30
公告 Claire Zheng · 九月 26, 2023 2023 InterSystems Python 编程大赛获奖者公布 Hi 开发者们, 是时候公布2023 InterSystems Python 编程大赛的获奖者了! 感谢所有提交15 份申请的出色参与者 🔥 #竞赛 #IRIS竞赛 0 0 0 29
文章 姚 鑫 · 十月 18, 2022 阅读大约需 3 分钟 第二十章 CSP Session 管理 - 状态管理 第二十章 CSP Session 管理 - 状态管理 状态管理 因为 HTTP 是无状态协议。为 Web 编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。 CSP 提供了许多用于状态管理的机制。这些中的每一个都可能适用于特定情况。 请求之间的跟踪数据 Web 应用程序中状态管理的基本问题是跟踪连续 HTTP 请求之间的信息。有许多可用的技术,包括: 使用隐藏的表单字段或 URL 参数在单个页面上存储数据 将数据存储在客户端的 cookie 中 将数据存储在服务器上的对象中的 %CSP.Session中 在 Caché 数据库中存储数据 在页面中存储数据 要将状态信息存储在页面中,必须放置它以便来自该页面的后续请求包含该信息。 #CSP #Caché 0 0 0 29
文章 姚 鑫 · 十二月 31, 2021 阅读大约需 4 分钟 第十一章 SQL聚合函数 SUM 第十一章 SQL聚合函数 SUM 返回指定列值之和的聚合函数。 #SQL #Caché 0 0 0 29
文章 姚 鑫 · 八月 22, 2023 阅读大约需 3 分钟 第六章 ObjectScript - Routine示例 第六章 ObjectScript - Routine示例 Routine示例 下面显示了一个名为 demoroutine 的示例例程,它是用 ObjectScript 编写的。它包含的过程与上一节示例类中所示的方法执行完全相同的操作。 #InterSystems IRIS for Health 0 0 0 29