文章
Nicky Zhu · 二月 4, 2021 阅读大约需 7 分钟
案例: 建立只能使用SQL的用户

上一篇:
IRIS中的权限管理

在上一篇文章中,我们介绍了IRIS中的权限控制体系。在本文中我们将以一个常见的实施需求为例介绍如何使用IRIS的权限配置出一个只能使用SQL的用户。

需求的分解

和所有用户需求一样,当用户提出一个需求时,除其语义显式的含义之外,还需分析其是否具有没有明确说明的含义。
对于一个只能使用SQL的用户这样一个需求,即应当结合平台的特征分解成为功能需求:
具有一个合法,可通过用户名和密码使用IRIS的用户
该用户的数据库权限
- 确认项:可以使用SQL访问所有数据库还是某几个特定的数据库?
该用户的SQL权限
- 确认项:对于特定的数据库,是否可以执行所有的DDL?
- 确认项:对于特定的数据库,是否对每一张表都可以执行Select、Update等所有的DML
该用户的程序权限
- 确认项:用户是否可以通过Portal登录并管理IRIS?

3 3
1 104
文章
Jiakeng Lei · 四月 22 阅读大约需 1 分钟
IRIS SQL网关连接Oracle19C数据库报错解决

问题:
通过JDBC连接Oracle19C数据报错 "ORA-28040: No matching authentication protocal"

解决 :
1、在数据库服务器上找到sqlnet.ora文件,一般在oracle安装目录app/oracle/product/19.0.0.0/db_1/network/admin/sqlnet.ora

2、如果有进行修改,没有直接创建

3、slqnet.ora文件新增或修改以下
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

4、注意事项:
① 如果没有sqlnet.ora文件可以直接创建 vi sqlnet.ora
② 如果有不能直接vi 需要使sed -a 命令追加,否则会导致ora文件乱码
③ 添加参数后新无需重启数据库或者监听,但是需要修改用户密码,否则会报错

5、修改用户名密码

sqlplus / as sysdba

alter user 用户名 identified by 新密码;

0 2
0 15

在使用xDBC连接到字符集为US7ASCII的Oracle数据库时,大家可能遇到过中文的乱码问题,尤其是使用Oracle自己的xDBC驱动的时候。

字符集为US7ASCII的Oracle数据库虽然可以保存中文数据,但给客户端带来了很多麻烦,需要对获取和提交的数据进行转码。

 

在Ensemble/Health Connect/InterSystems IRIS 中使用SQL适配器连接到这样的Oracle数据库时,可以使用$ZCVT函数进行转码。

1. $ZCVT函数

$ZCVT函数是广泛使用的字符串转换函数,可以做大小写转换、编码转换、URL 和 URI 转换等。我们用其编码转换能力来解决字符集转码问题。

 

2. 获取的SQL结果集数据有中文时

5 2
0 218
文章
Qiao Peng · 三月 5, 2021 阅读大约需 3 分钟
Global 扫描和切片

Global 扫描和切片

这是一个在 IRIS 2020.1 和 Caché 2018.1.3 上工作的代码示例
不会与新版本保持同步
也不会获得 InterSystems 提供的支持服务!   

大多数情况下,默认存储使用的 global 只有 1 个表示 IDKEY 的下标级别。 对于索引 global,可能有 2 个或更多下标级别。

数组、父子关系或扩展了基础数据类的持久化类 是具有更多下标级别的示例。 但所有这些 global 都非常统一。

1 1
0 48
文章
Muhammad Waseem · 十月 16, 2021 阅读大约需 2 分钟
如何使用HL7相應地更新結果參考範圍和異常標誌

在本文中,我將演示以下內容:

  • 使用自定義實用程序函數從數據庫更新 ReferencesRange(OBX:7) 針對 ObservationIdentifier(OBX:3.1)[TestCode]
  • 根據數據庫實用程序函數中的 ObservationIdentifier(OBX:3.1)[TestCode] 和 ObservationValue(OBX:5)[Result] 更新異常標誌 (OBX:8)
  • 基於異常標誌的路由消息 (OBX:8)

以下是主要和轉換後的 HL7 2.5 ORU_R01 消息:
 

0 1
0 27
文章
姚 鑫 · 三月 27, 2021 阅读大约需 11 分钟
第十三章 使用动态SQL(五)

第十三章 使用动态SQL(五)

从结果集中返回特定的值

要从查询结果集中返回特定的值,必须一次一行遍历结果集。
要遍历结果集,请使用%Next()实例方法。
(对于单一值,结果对象中没有行,因此%Next()返回0,而不是错误。)
然后,可以使用%Print()方法显示整个当前行的结果,或者检索当前行的指定列的值。

%Next()方法获取查询结果中下一行的数据,并将该数据放入结果集对象的data属性中。
%Next()返回1,表示它位于查询结果中的某一行上。
%Next()返回0,表示它位于最后一行(结果集的末尾)之后。
每次调用%Next()返回1个增量%ROWCOUNT;
如果游标定位在最后一行之后(%Next()返回0),%ROWCOUNT表示结果集中的行数。

0 1
0 67
文章
姚 鑫 · 三月 11, 2021 阅读大约需 10 分钟
第八章 SQL修改数据库

第八章 SQL修改数据库

可以对现有的表使用SQL语句,也可以对相应的持久化类使用ObjectScript操作来修改InterSystems IRIS®数据平台数据库的内容。
不能修改定义为只读的持久类(表)。

使用SQL命令为维护数据的完整性提供了自动支持。
SQL命令是一个原子操作(全部或没有)。
如果表上定义了索引,SQL将自动更新它们以反映更改。
如果定义了任何数据或引用完整性约束,SQL将自动执行它们。
如果有任何已定义的触发器,执行这些操作将拉动相应的触发器。

插入数据

可以使用SQL语句或设置和保存持久化类属性将数据插入表中。

使用SQL插入数据

INSERT语句将一条新记录插入SQL表中。
可以插入一条记录或多条记录。

下面的示例插入一条记录。
它是插入单个记录的几种可用语法形式之一:

0 0
0 118
文章
姚 鑫 · 三月 28, 2021 阅读大约需 7 分钟
第十三章 使用动态SQL(六)

第十三章 使用动态SQL(六)

%ObjectSelectMode = 1 Swizzling字段名称属性

下面的示例使用%ObjectSelectMode = 1进行准备,当使用字段名称属性返回值时,其类型类别为可Swizzle类型的字段(持久性类,序列类或流类)将自动发生Swizzle。转换字段值的结果是相应的对象参考(oref)。使用%Get()%GetData()方法访问字段时,InterSystems IRIS不会执行此筛选操作。在此示例中,rset.Home处于Swizzle状态,而引用同一字段的rset.%GetData(2)处于not swizzled状态:

0 0
0 29
文章
姚 鑫 · 四月 15, 2021 阅读大约需 10 分钟
第二章 定义和构建索引(三)

#

第二章 定义和构建索引(三)

# 位图索引

位图索引是一种特殊类型的索引,它使用一系列位串来表示与给定索引数据值相对应的一组ID值。

位图索引具有以下重要功能:

  • 位图是高度压缩的:位图索引可以比标准索引小得多。这大大减少了磁盘和缓存的使用量。
  • 位图操作针对事务处理进行了优化:与使用标准索引相比,可以在表中使用位图索引,而不会降低性能。
  • 位图上的逻辑操作(countingANDOR)经过优化以获得高性能。
  • SQL引擎包括许多可以利用位图索引的特殊优化。

位图索引的创建取决于表的唯一标识字段的性质:

0 0
0 27
文章
姚 鑫 · 五月 2, 2021 阅读大约需 5 分钟
第一章 简介global

第一章 简介global

InterSystems IRIS®的核心功能之一是其多维存储引擎。此功能允许应用程序以紧凑、高效的多维稀疏数组存储数据。这些数组称为全局数组。

本章介绍:
- 什么是全局变量(globals ),以及可以对其执行的操作。
- 全局变量的逻辑和物理结构,包括在分布式数据库体系结构中使用全局变量。
- 如何使用全局变量在应用程序中存储和检索数据。
- 如何使用全局变量。

特点

全局变量提供了一种在持久的多维数组中存储数据的易于使用的方法。

例如,可以使用名为^Settings的全局变量将值“Red”与键“Color”相关联:

SET ^Settings("Color")="Red"

可以利用全局变量的多维特性来定义更复杂的结构:

0 0
0 37
文章
姚 鑫 · 五月 16, 2021 阅读大约需 6 分钟
第二章 使用%UnitTest进行单元测试

第二章 使用%UnitTest进行单元测试

本教程的第二部分介绍了如何使用%UnitTest包对InterSystems IRIS代码进行单元测试。完成本教程的这一部分后,将能够:

  • 解释%UnitTest包中三个主要类的角色。
  • 列出基于%UnitTest包的单元测试类和方法的要求。
  • 创建并执行方法的单元测试。
  • 浏览%UnitTest.Manager创建的测试报告。
  • 执行单元测试时,使用%UnitTest.TestCase方法初始化和还原数据库数据。

什么是%UnitTest?

%UnitTest包是一组为IRIS提供测试框架的类。在结构上,它类似于xUnit测试框架。%UnitTest为创建和执行以下各项的单元测试提供类和工具:

0 0
0 30
文章
姚 鑫 · 九月 18, 2021 阅读大约需 4 分钟
第十九章 SQL命令 CREATE TABLE(六)

第十九章 SQL命令 CREATE TABLE(六)

WITH子句,%CLASSPARAMETER关键字,STORAGETYPE关键字

可选的WITH子句可以在表格元素逗号结尾的圆括号之后和Shard Key定义(如果存在的话)之后指定。
WITH子句可以包含一个用逗号分隔的列表:
- 一个或多个%CLASSPARAMETER 子句。
- STORAGETYPE子句

0 0
0 15
文章
姚 鑫 · 十月 19, 2021 阅读大约需 5 分钟
第五十章 SQL命令 HAVING(一)

第五十章 SQL命令 HAVING(一)

对一组数据值指定一个或多个限制性条件的SELECT子句。

大纲

SELECT field
FROM table
GROUP BY field
HAVING condition-expression

SELECT aggregatefunc(field %AFTERHAVING)
FROM table
[GROUP BY field]
HAVING condition-expression

参数

  • condition-expression - 由一个或多个布尔谓词组成的表达式,用于控制要检索哪些数据值。

描述

可选的HAVING子句出现在FROM子句、可选的WHEREGROUP BY子句之后,可选的ORDER BY子句之前。

0 0
0 13
文章
姚 鑫 · 十一月 21, 2021 阅读大约需 9 分钟
第八十三章 SQL命令 UPDATE(二)

第八十三章 SQL命令 UPDATE(二)

显示到逻辑数据转换

数据以逻辑模式格式存储。
例如,日期存储为整数天数,时间存储为从午夜开始的秒数,%List存储为编码字符串。
大多数其他数据,如字符串和数字,不需要转换;
无论当前模式如何,它们都以相同的格式输入、更新和存储。

对于已转换的数据,可以在LOGICAL模式(默认)中更新数据值,或者通过指定选择模式,使用更易于阅读的格式(DISPLAY模式或ODBC模式)更新数据值。
例如,通过指定选择模式,可以以DISPLAY格式(例如2/22/2018)、ODBC格式(例如2018-02-22)或逻辑格式(例如64701)更新日期。
对于某些数据类型,还可以在ODBC或DISPLAY选择模式下以LOGICAL格式指定数据。

0 0
0 8
文章
姚 鑫 · 十二月 24, 2021 阅读大约需 4 分钟
第四章 SQL聚合函数 COUNT(二)

第四章 SQL聚合函数 COUNT(二)

权限

要使用COUNT(*),必须对指定的表具有表级别的SELECT权限。
要使用COUNT(column-name),必须对指定的列具有列级的SELECT权限,或者对指定的表具有表级的SELECT权限。
可以通过调用%CHECKPRIV命令来确定当前用户是否具有SELECT权限。
可以通过调用$SYSTEM.SQL.Security.CheckPrivilege()方法来确定指定的用户是否具有表级SELECT权限。

性能

为了获得最优的COUNT性能,你应该按照以下方式定义索引:

0 0
0 14
文章
姚 鑫 · 一月 10 阅读大约需 1 分钟
第二十章 SQL函数 ATAN

第二十章 SQL函数 ATAN

一个标量数值函数,返回角的正切的弧切值(以弧度为单位)。

大纲

{fn ATAN(numeric-expression)}

参数

  • numeric-expression - 一个数值表达式。
    这是这个角的正切。

ATAN返回NUMERICDOUBLE数据类型。
如果数值表达式是数据类型DOUBLE, ATAN返回DOUBLE;
否则,返回NUMERIC

0 0
0 12
文章
姚 鑫 · 一月 28 阅读大约需 6 分钟
第三十七章 SQL函数 CURRENT_TIMESTAMP

第三十七章 SQL函数 CURRENT_TIMESTAMP

日期/时间函数,返回当前本地日期和时间。

大纲

CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(precision)

参数

  • precision - 一个正整数,它将时间精度指定为小数秒的位数。
    默认值是0(没有小数秒);
    这个默认值是可配置的。

CURRENT_TIMESTAMP返回TIMESTAMP数据类型。

描述

CURRENT_TIMESTAMP要么不接受参数,要么接受精度参数。
不允许使用空参数括号。

CURRENT_TIMESTAMP返回当前时区的本地日期和时间;
它会根据当地的时间变化进行调整,例如日光节约时间。

0 0
0 19
文章
姚 鑫 · 二月 12 阅读大约需 1 分钟
第五十二章 SQL函数 DEGREES

第五十二章 SQL函数 DEGREES

将弧度转换为角度的数值函数。

大纲

DEGREES(numeric-expression)

{fn DEGREES(numeric-expression)}

参数

  • numeric-expression - 以弧度表示的角度的量度。解析为数值的表达式。

度返回NUMERICDOUBLE数据类型。如果NUMERIC-EXPRESSION的数据类型为DOUBLE,则度返回DOUBLE;否则返回NUMERIC

度数可以指定为标准标量函数,也可以指定为使用大括号语法的ODBC标量函数。

描述

DEGREES以弧度为单位进行角度测量,并以度为单位返回相应的角度测量值。如果传递空值,度将返回空。

返回值的默认精度为36,默认小数位数为18

0 0
0 13
文章
姚 鑫 · 二月 26 阅读大约需 3 分钟
第六十六章 SQL函数 ISNULL

第六十六章 SQL函数 ISNULL

测试NULL并返回相应表达式的函数。

大纲

ISNULL(check-expression,replace-expression)

参数

  • check-expression - 要计算的表达式。
  • replace-expression - Check-ExpressionNULL时返回的表达式。

ISNULL返回与Check-Expression相同的数据类型。

0 0
0 6
文章
姚 鑫 · 三月 15 阅读大约需 4 分钟
第八十二章 SQL函数 $LISTDATA

第八十二章 SQL函数 $LISTDATA

列表函数,指示指定元素是否存在并具有数据值。

大纲

$LISTDATA(list[,position])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。您可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。
  • position - 可选 — 指定列表中元素的整数表达式。

描述

$LISTDATA 检查列表中请求元素中的数据。如果位置参数指示的元素在列表中并且具有数据值,则 $LISTDATA 返回值 1。如果元素不在列表中或没有数据值,则 $LISTDATA 返回值 0。

0 0
0 8
文章
姚 鑫 · 三月 31 阅读大约需 2 分钟
第九十八章 SQL函数 MONTHNAME

第九十八章 SQL函数 MONTHNAME

返回日期表达式的月份名称的日期函数。

大纲

{fn MONTHNAME(date-expression)}

参数

  • date-expression - 计算结果为 日期整数、ODBC 日期或时间戳的表达式。此表达式可以是列名、另一个标量函数的结果或日期或时间戳字面量。

描述

MONTHNAME 将日期整数、$HOROLOG$ZTIMESTAMP 值、ODBC 格式日期字符串或时间戳作为输入。

日期表达式时间戳可以是数据类型 %Library.PosixTime(编码的 64 位有符号整数),也可以是数据类型 %Library.TimeStamp (yyyy-mm-dd hh:mm:ss.fff)

时间戳的时间部分不被评估,可以省略。

0 0
0 5
文章
姚 鑫 · 四月 18 阅读大约需 3 分钟
第116章 SQL函数 REPLACE

第116章 SQL函数 REPLACE

字符串函数,用于替换字符串中的子字符串。

大纲

REPLACE(string,oldsubstring,newsubstring)

参数

  • string - 作为子字符串搜索目标的字符串表达式。
  • oldsubstring - 字符串中要匹配的子字符串。
  • newsubstring - 用于替换 oldsubstring 的子字符串。

描述

REPLACE 在字符串中搜索子字符串并替换所有匹配项。匹配区分大小写。如果找到匹配项,它将用 newsubstring 替换 oldsubstring 的每个实例。替换子串可能比它替换的子串长或短。如果找不到子字符串,则 REPLACE 将原样返回原字符串。

0 0
0 10
文章
姚 鑫 · 五月 2 阅读大约需 2 分钟
第130章 SQL函数 SQRT

第130章 SQL函数 SQRT

返回给定数值表达式的平方根的数值函数。

大纲

SQRT(numeric-expression)

{fn SQRT(numeric-expression)}

参数

  • numeric-expression - 解析为计算平方根的正数的表达式。

SQRT 返回 NUMERICDOUBLE 数据类型。如果 numeric-expression 是数据类型 DOUBLE,则 SQRT 返回 DOUBLE;否则,它返回 NUMERIC。

0 0
0 8
文章
姚 鑫 · 五月 18 阅读大约需 10 分钟
第146章 SQL函数 TO_POSIXTIME

第146章 SQL函数 TO_POSIXTIME

注:此函数在IRIS版本可用,Cache不可用。

将格式化的日期字符串转换为 %PosixTime 时间戳的日期/时间函数。

0 0
0 3