Mysql里有sql_safe_updates参数,可以限制不带where条件的update/delete语句执行失败,这个参数设置后,可以防止业务bug/漏洞导致把整个表都更新或者删除(线上发生过的案例),也可以防止在线误操作更新/删除整张表。
请问Cache或者IRIS中有相关的设置吗?翻了下帮助文档,没找到,有个话,告诉下是哪个设置?谢谢
Mysql里有sql_safe_updates参数,可以限制不带where条件的update/delete语句执行失败,这个参数设置后,可以防止业务bug/漏洞导致把整个表都更新或者删除(线上发生过的案例),也可以防止在线误操作更新/删除整张表。
请问Cache或者IRIS中有相关的设置吗?翻了下帮助文档,没找到,有个话,告诉下是哪个设置?谢谢
一个SELECT子句,指定要查询的一个或多个表。
SELECT ... FROM [optimize-option] table-ref [[AS] t-alias][,table-ref [[AS] t-alias]][,...]
optimize-option - 可选-指定查询优化选项(优化器提示)的单个关键字或由空格分隔的一系列关键字。支持以下关键字:%ALLINDEX、%FIRSTTABLE TABLE TABNAME、%FULL、%IGNOREINDEX NAME、%INORDER、%NOFLATTEN、%NOMERGE、%NOREDUCE、%NOSVSO、%NOTOPOPT、%NOUNIONOROPT、%PARALLEL和%STARTTABLE。table-ref - 从其中检索数据的一个或多个表、视图、表值函数或子查询,以逗号分隔的列表或使用JOIN语法指定。
在使用带有JOIN语法的视图时存在一些限制。
可以指定一个用括号括起来的子查询。AS t-alias - 可选—表名的别名。
必须是有效的标识符。FROM子句指定在SELECT语句中查询数据的一个或多个表(或视图或子查询)。
如果没有查询表数据,则FROM子句是可选的,如下所述。
多个表被指定为逗号分隔的列表,或者由其他JOIN
冻结查询计划。
FREEZE PLANS BY ID statement-hash
FREEZE PLANS BY TABLE table-name
FREEZE PLANS BY SCHEMA schema-name
FREEZE PLANS
statement-hash - 查询计划的SQL语句定义的内部哈希表示,用引号括起来。
偶尔,看起来相同的SQL语句可能有不同的语句散列项。
需要SQL语句的不同代码生成的设置/选项的任何差异都会导致不同的语句散列。
这种情况可能发生在支持不同内部优化的不同客户机版本或不同平台上。table-name - 现有表或视图的名称。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。schema-name - 现有模式的名称。
该命令冻结指定模式中所有表的所有查询计划。FREEZE PLANS命令用来冻结查询计划。
需要解冻已冻结的查询计划,使用unfreeze plans命令。
“冻结计划”可以冻结“计划状态”为“未冻结”的查询计划。
它不能冻结计划状态为“Unfrozen/Parallel”的查询计划。
重新定位游标,并从中检索数据。
FETCH cursor-name [INTO host-variable-list ]
cursor-name - 当前打开的游标的名称。
游标名称是在DECLARE命令中指定的。
游标名称区分大小写。INTO host-variable-list - 可选—将取操作列中的数据放入局部变量中。
host-variable-list指定一个主机变量或一个逗号分隔的主机变量列表,它们是包含与游标关联的数据的目标。
INTO句是可选的。
如果没有指定,FETCH语句只定位游标。在嵌入式SQL应用程序中,FETCH语句从游标检索数据。
所需的操作顺序是:DECLARE、OPEN、FETCH、CLOSE。
在未打开的游标上尝试FETCH会导致SQLCODE -102错误。
作为SQL语句,这只在嵌入式SQL中得到支持。
通过ODBC使用ODBC API支持等价的操作。
INTO子句可以指定为DECLARE语句的子句,也可以指定为FETCH语句的子句,或者两者都指定。
INTO子句允许将fetch列中的数据放到本地主机变量中。
列表中的每个主机变量,从左到右,都与游标结果集中的相应列相关联。
每个变量的数据类型必须匹配或支持对应结果集列的数据类型的隐式转换。
变量的数量必须与游标选择列表中的列数匹配。
返回指定查询的查询计划。
EXPLAIN [ALT] [STAT] [INTO :host-variable] query
ALT - 可选-返回备用查询计划。默认情况下,返回单个查询计划。STAT - 可选-(仅限动态SQL):返回查询计划运行时性能统计信息。默认情况下,返回不带运行时统计信息的查询计划。对于嵌入式SQL,此语法被忽略。INTO :host-variable - 可选-(仅限嵌入式SQL):放置查询计划的输出主机变量。对于动态SQL,此语法被忽略。query - SELECT queryEXPLAIN命令以xml标记文本字符串的形式返回指定查询的查询计划。
该查询计划作为一个结果集返回,该结果集由一个名为plan的字段组成。
查询必须是SELECT查询。
EXPLAIN不能用于创建查询计划的其他SQL操作,例如带SELECT子句的INSERT。
指定不以SELECT关键字开始的查询将导致SQLCODE -51。
可以使用Show Plan显示非select查询的查询计划。
ALT和STAT关键字可以以任何顺序指定。
INTO关键字必须在这些关键字之后指定。
可选的ALT关键字生成备用查询计划。
所有备用查询计划都以相同的xml标记文本字符串返回。
规范化查询文本(标记为)在每个查询计划之前列出。
删除视图
DROP VIEW view-name [CASCADE | RESTRICT]
view-name 要删除的视图的名称。
视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。
非限定视图名接受默认模式名。CASCADE RESTRICT - 可选-指定CASCADE关键字以删除引用view-name的任何其他视图。如果有另一个视图引用view-name,则指定RESTRITE将发出SQLCODE-321错误。默认值为限制。DROP VIEW命令删除视图,但不删除基础表或数据。
也可以使用DropView()方法调用来调用拖放视图操作:
$SYSTEM.SQL.Schema.DropView(viewname,SQLCODE,%msg)
DROP VIEW命令是特权操作。在使用DROP VIEW之前,进程必须拥有指定视图的%DROP_VIEW管理权限或DELETE OBJECT权限。否则将导致SQLCODE-99错误(特权冲突)。可以通过调用%CHECKPRIV命令来确定当前用户是否具有删除权限。可以通过调用$SYSTEM.SQL.Security.CheckPrivileve()方法来确定指定用户是否具有删除权限。
删除用户帐户。
DROP USER user-name
user-name 要删除的用户名。DROP USER命令可删除用户帐户。此用户帐户是使用CREATE USER创建的,并指定了用户名。如果指定的用户名与现有用户帐户不对应, IRIS将发出SQLCODE-118错误。可以通过调用$SYSTEM.SQL.Security.UserExists()方法来确定用户是否存在。
用户名不区分大小写。
还可以使用管理门户删除用户。选择System Administration(系统管理)、Security(安全性)、Users(用户)以列出现有用户。在此用户帐户表上,可以单击要删除的用户帐户的删除。
DROP USER命令是特权操作。在嵌入式SQL中使用DROP USER之前,必须以具有适当权限的用户身份登录。否则将导致SQLCODE-99错误(特权冲突)。
使用$SYSTEM.Security.Login()方法分配具有适当权限的用户:
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
&sql( )
必须具有%Service_Login:Use权限才能调用$SYSTEM.Security.Login方法。
手术室是医疗机构最重要和最紧缺的医疗资源之一,也是节奏最快、强度最高、人员最密、责任最大的临床场景之一。传统基于人工和纸质的手术申请、手术排期、手术记录和交接转移等耗费了医务人员大量的时间和精力,导致手术室资源运用效率欠佳,且数据时限性与准确性均有待提高。医学信息系统问世和应用后,手术室系统的实施与优化一直是临床用户与医学信息工作者共同热议的话题。
手术室系统既可以作为整体医学信息系统的一部分,也可以作为单独的产品/模块与其他系统对接。鉴于手术室系统过于庞大和精细,本文只挑选其中的“临床记录表”功能进行探讨。
1. 化零为整– 临床记录表
手术过程中会产生诸多数据,这些数据可能来自于患者(生命体征、出入量等)、仪器(心电监护仪、呼吸机、麻醉机、、输液泵等)或者其他系统(电子病历系统、医嘱系统、耗材系统等),分别由不同角色(医生、护士、麻醉师、药剂师等)进行录入和传输。为了让手术核心参与人员方便的获取全部所需数据,手术室系统首先应该做到“化零为整”的前端展示。图1中的“临床记录表”大体分为4个部分:
①行动栏:医务人员通过行动栏中的行动项目,可以清晰的获知在当前场景下需要完成的工作内容,手术医生、麻醉医生、手术室护士等角色均可根据自己的职责和任务单独创建行动栏。
②搜索栏:医务人员通过搜索栏中的预设选项,可以自由切换数据类别,并根据临床需要,查看不同时间段的不同颗粒度的数据。
删除触发器
DROP TRIGGER name [ FROM table ]
name - 要删除的触发器的名称。触发器名称可以是限定的,也可以是非限定的;如果限定,则其架构名称必须与表的架构名称匹配。FROM table - 可选-要从中删除触发器的表。如果指定了FROM子句,则只在表中搜索命名触发器。如果未指定FROM子句,则在NAME中指定的整个架构中搜索命名触发器。DROP TRIGGER命令删除触发器。如果要修改现有触发器,则必须先调用DROP TRIGGER删除旧版本的触发器,然后再调用CREATE TRIGGER。
注:DROP TABLE删除与该表关联的所有触发器。
DROP TRIGGER命令是特权操作。用户必须具有%DROP_TRIGGER管理权限才能执行DROP TRIGGER。否则将导致SQLCODE-99错误,因为%msg用户‘name’没有%DROP_TRIGGER权限。
用户必须对指定表拥有%ALTER特权。如果用户是表的所有者(创建者),则会自动授予该用户对该表的%ALTER权限。否则,必须授予用户对该表的%ALTER特权。否则将导致SQLCODE-99错误,因为%msg用户‘name’没有更改‘Schema.TableName’的表定义所需的%ALTER特权。
生产环境中会定时生成备份(全备,增备),因为服务器空间有限,所以需要定时删除。
请问:IRIS2021 是否有工具或者代码可以实现定时删除3周前备份文件的功能。如果是代码实现,思路是什么,能否给个Demo。
删除表及其数据(可选)。
DROP TABLE table
[RESTRICT | CASCADE] [%DELDATA | %NODELDATA]
table - 要删除的表的名称。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。
没有使用架构搜索路径值。RESTRICT ,CASCADE - 可选-限制仅允许删除没有依赖视图或完整性约束的表。如果未指定关键字,则默认设置为RESTRITION。CASCADE允许删除具有依赖视图或完整性约束的表;作为表删除的一部分,任何引用视图或完整性约束也将被删除。外键约束不支持CASCADE关键字选项。%DELDATA,%NODELDATA - 可选-这些关键字指定在删除表时是否删除与表关联的数据。默认情况下,删除表格数据。DROP TABLE命令删除一个表及其对应的持久化类定义。如果该表是其架构中的最后一项,则删除该表也会删除该架构及其相应的持久化类包。
默认情况下,DROP TABLE同时删除表定义和表数据(如果存在)。%NODELDATA关键字允许指定删除表定义,但不能指定删除表的数据。
DROP TABLE删除与该表关联的所有索引和触发器。
要删除表格,必须满足以下条件:
删除角色
DROP ROLE role-name
role-name - 要删除的角色的名称。名称是一个标识符。角色名称不区分大小写。DROP ROLE语句删除角色。删除角色时, IRIS会将其从已授予该角色的所有用户和角色中撤消,并将其从数据库中删除。
可以通过调用$SYSTEM.SQL.Security.RoleExists()方法来确定角色是否存在。如果尝试删除不存在(或已被删除)的角色,则DROP ROLE将发出SQLCODE-118错误。
DROP ROLE命令是特权操作。在嵌入式SQL中使用DROP ROLE之前,至少需要满足以下要求之一:
%Admin_Secure:USE权限。否则将导致SQLCODE-99错误(特权冲突)。
使用$SYSTEM.Security.Login()方法分配具有适当权限的用户:
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
&sql( )
必须具有%Service_Login:Use权限才能调用$SYSTEM.Security.Login方法。
删除查询
DROP QUERY name [ FROM className ]
name - 要删除的查询的名称。名称是一个标识符。不要指定查询的参数括号。名称可以是限定的(schema.name),也可以是非限定的(Name)。除非指定了FROM className子句,否则非限定查询名称将采用系统范围的默认架构名称。FROM className - 可选-如果指定,FROM className子句将从给定类中删除查询。如果未指定此子句, IRIS将在架构的所有类中搜索查询,并将其删除。但是,如果找不到该名称的查询,或者找到多个该名称的查询,则会返回错误代码。如果删除查询导致空类,则DROP QUERY也会删除该类。DROP QUERY命令删除查询。删除查询时, IRIS将从所有已授予该查询的用户和角色中吊销该查询,并将其从数据库中删除。
要删除查询,必须具有GRANT命令指定的%DROP_QUERY管理权限。如果要尝试删除具有已定义所有者的类的查询,则必须以类的所有者身份登录。否则,系统会生成SQLCODE-99错误(权限冲突)。
如果包含查询定义的类定义是已部署的类,则不能删除该查询。
删除存储过程
DROP PROCEDURE procname [ FROM className ]
DROP PROC procname [ FROM className ]
procname - procname要删除的过程的名称。名称是一个标识符。不要指定过程的参数括号。名称可以是限定的(schema.name),也可以是非限定的(Name)。除非指定了FROM className子句,否则非限定过程名称将采用默认架构名称。FROM className - 可选-如果指定,FROM className子句将从给定类中删除过程。如果未指定此子句, IRIS将在架构的所有类中搜索该过程,并将其删除。但是,如果找不到此名称的过程,或者找到多个此名称的过程,则会返回错误代码。如果删除过程导致空类,则DROP PROCEDURE也会删除该类。DROP PROCEDURE命令删除当前命名空间中的过程。删除过程时, IRIS会将其从已授予该过程的所有用户和角色中撤消,并将其从数据库中删除。
要删除过程,必须具有GRANT命令指定的%DROP_PROCEDURE管理权限。如果要尝试删除具有已定义所有者的类的过程,则必须以类的所有者身份登录。否则,系统会生成SQLCODE-99错误(权限冲突)。
删除方法
DROP METHOD name [ FROM className ]
name - 要删除的方法的名称。名称是一个标识符。请不要指定方法的参数括号。名称可以是限定的(schema.name),也可以是非限定的(Name)。除非指定了FROM className子句,否则非限定方法名称将采用默认架构名称。FROM className - 可选-如果指定,FROM className子句将从给定类中删除该方法。请注意,必须指定方法的类名(MethBonusCalc),而不是SQL名称(BonusCalc)。如果未指定此子句, IRIS将在架构的所有类中搜索该方法,并将其删除。但是,如果找不到此名称的方法,或者找到多个此名称的方法,则会返回错误代码。如果删除该方法会导致空类,则Drop方法也会删除该类。DROP METHOD命令可删除方法。删除方法时, IRIS会将其从已授予该方法的所有用户和角色中撤消,并将其从数据库中删除。
要删除方法,必须具有GRANT命令指定的%DROP_METHOD管理权限。如果要尝试删除具有已定义所有者的类的方法,则必须以类所有者的身份登录。否则,系统会生成SQLCODE-99错误(权限冲突)。
如果包含方法定义的类定义是已部署的类,则不能删除该方法。
删除索引。
DROP INDEX index-name [ON [TABLE] table-name]
DROP INDEX table-name.index-name
index-name - 要删除的索引的名称。Index-name是名称的SQL版本,可以包括下划线和其他标点符号。它作为SQL映射名称列在表的Management Portal SQL Catalog Details中。ON table-name 或 ON TABLE table-name - 可选-与索引关联的表的名称。可以使用任一语法指定表名:第一个语法使用ON子句;TABLE关键字是可选的。第二个语法使用限定名称语法schema-name.table-name.index-name。表名可以是限定的(schema.table),也可以是非限定的(Table)。未限定的表名采用缺省模式名。如果完全省略表名, IRIS将删除找到的第一个与index-name匹配的索引,如下所述。DROP INDEX语句从表定义中删除索引。可以使用DROP INDEX删除标准索引、位图索引或位片索引。通过删除相应的唯一索引,可以使用DROP INDEX删除唯一约束或主键约束。不能使用DROP INDEX删除位图范围索引或主地图(数据/主)IDKEY索引。
删除函数
DROP FUNCTION name [ FROM className ]
name - 要删除的函数的名称。名称是一个标识符。不要指定函数的参数括号。名称可以是限定的(schema.name),也可以是非限定的(Name)。除非指定了FROM className子句,否则非限定函数名称将采用系统范围的默认架构名称。FROM className - 可选-如果指定,FROM className子句将从给定类中删除函数。请注意,必须指定函数的类名(FuncBonusCalc),而不是SQL名称(BonusCalc)。如果未指定FROM子句, IRIS将在架构的所有类中搜索该函数,并将其删除。但是,如果找不到此名称的函数,或者找到多个此名称的函数,则会返回错误代码。如果删除函数会导致空类,则DROP函数也会删除该类。DROP Function命令用于删除函数。当删除某个函数时, IRIS会将其从已授予该函数的所有用户和角色中撤消,并将其从数据库中删除。
要删除函数,必须拥有由GRANT命令指定的%DROP_Function管理权限。否则,系统会生成SQLCODE-99错误(权限冲突)。
如果包含函数定义的类定义是已部署的类,则不能删除该函数。
删除数据库(命名空间)。
DROP DATABASE dbname [RETAIN_FILES]
dbname - 要删除的数据库(命名空间)的名称。RETAIN_FILES - 可选-如果指定,则不会删除物理数据库文件(IRIS.DAT文件)。默认情况下,删除.dat文件以及命名空间和其他数据库实体。DROP DATABASE命令删除命名空间及其关联的数据库。
指定的dbname是包含相应数据库文件的命名空间和目录的名称。指定dbname作为标识符。命名空间名称不区分大小写。如果指定的DBNAME命名空间不存在, IRIS将发出SQLCODE-340错误。
DROP DATABASE命令是一个特权操作。
在使用DROP DATABASE之前,必须以%Admin_Manage资源的用户身份登录。
用户还必须拥有用于例程和全局数据库定义的资源的READ权限。
如果不这样做,将导致SQLCODE -99错误(权限冲突)。
使用$SYSTEM.Security.Login()方法为用户分配适当的权限:
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
&sql( )
必须具有%Service_Login:Use权限才能调用$SYSTEM.Security.Login方法。
亲爱的社区开发者们,大家好!
欢迎积极参与新一轮InterSystems系联开发者竞赛!
时间: 2021年10月4日--24日
总奖金池高达 9,450美金!
删除用户定义的聚合函数。
DROP AGGREGATE name
name - 要删除的用户定义聚合函数的名称。名称可以是限定的(schema.aggname),也可以是非限定的(aggname)。非限定名称采用默认架构名称。DROP Aggregate命令删除用户定义的聚合函数(UDAF)。使用CREATE Aggregate命令创建用户定义的聚合函数。
如果尝试删除不存在的UDAF,SQL会发出SQLCODE-428错误,并显示如下消息:User Defined Aggregate Function Sample.SecondHighest does not exist.
删除UDAF会自动清除引用该UDAF的所有缓存查询。
指定仅返回不同值的SELECT子句。
SELECT [DISTINCT [BY (item {,item2})] ] | [ALL]
select-item {,select-item2}
DISTINCT - 可选-返回组合选择项值唯一的行。DISTINCT BY (item {,item2}) - 可选-返回按(项)值唯一的行的选择项值。ALL - 可选-返回结果集中的所有行。默认设置。可选DISTINCT子句出现在SELECT关键字之后、可选TOP子句和第一个SELECT-ITEM之前。
DISTINCT子句应用于SELECT语句的结果集。它将每个不同(唯一)值返回的行数限制为一个任意行。如果未指定DISTINCT子句,则默认情况下显示满足选择条件的所有行。ALL子句与不指定DEFAULT子句相同;如果指定ALL,SELECT将返回表中满足选择条件的所有行。
DISTINCT从句有两种形式:
SELECT DISTINCT:为选择项值的每个唯一组合返回一行。可以指定一个或多个选择项。例如,以下查询返回一行,其中包含Home_State和Age值的每个唯一组合的Home_State和Age值:SELECT DISTINCT Home_State,Age FROM Sample.以下两个示例都删除了TempEmployees表中的所有行。请注意,FROM关键字是可选的:
DELETE FROM TempEmployees
DELETE TempEmployees
以下示例从Employees表中删除员工编号234:
DELETE
FROM Employees
WHERE EmpId = 234
下面的示例从ActiveEmployees表中删除CurStatus列设置为“RETIRED”的所有行:
DELETE FROM ActiveEmployees
WHERE CurStatus = 'Retired'
下面的示例使用子查询删除行:
DELETE FROM (SELECT Name,Age FROM Sample.Person WHERE Age > 65)
在下面的一组程序示例中,第一个程序创建了一个名为SQLUser.WordPair的表,该表有三列。下一个程序插入六条记录。后续程序使用基于指针的嵌入式SQL删除所有英语记录,并使用动态SQL删除所有法语记录。最后一个程序显示剩余的记录,然后删除该表。
ClassMethod Delete1()
{
&sql(
CREATE TABLE SQLUser.
目录
技术概要: Globals
本文档向您介绍了 globals 的概念,globals是 InterSystems IRIS®数据平台的底层存储结构。我们将向您展示如何使用关系模型和对象模型访问 globals,以及如何直接访问 globals。
CodeMirror { height: auto; } .CodeMirror.cm-s-inner { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit; background-repeat: inherit; } .CodeMirror-scroll { overflow: auto hidden; z-index: 3; } .CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); } .
从表中删除行。
DELETE [%keyword] [FROM] table-ref [[AS] t-alias]
[FROM [optimize-option] select-table [[AS] t-alias]
{,select-table2 [[AS] t-alias]} ]
[WHERE condition-expression]
DELETE [%keyword] [FROM] table-ref [[AS] t-alias]
[WHERE CURRENT OF cursor]
%keyword - 可选-以下一个或多个关键字选项,以空格分隔:%NOCHECK、%NOFPLAN、%NOINDEX、%NOJOURN、%NOLOCK、%NOTRIGGER、%PROFILE、%PROFILE_ALL。FROM table-ref - 要从中删除行的表。这不是FROM子句;它是一个FROM关键字,后跟一个表引用。(FROM关键字是可选的;table-ref是必需的。)表名(或视图名)可以是限定的(schema.table),也可以是不限定的(Table)。使用架构搜索路径(如果提供)或默认架构名称将非限定名称与其架构匹配。声明游标
DECLARE cursor-name CURSOR FOR query
cursor-name - 游标的名称,必须以字母开头,并且仅包含字母和数字。(游标名称不遵循SQL标识符约定)。游标名称区分大小写。它们受其他命名限制的约束,如下所述。query - 定义游标结果集的标准SELECT语句。此选择可以包括%NOFPLAN关键字,以指定应忽略此查询的冻结计划(如果有)。此SELECT可以包括ORDER BY子句,可以带有或不带有TOP子句。此SELECT可以在FROM子句中指定表值函数。DECLARE语句声明在基于游标的嵌入式SQL中使用的游标。声明游标后,可以发出OPEN语句来打开游标,然后发出一系列FETCH语句来检索各个记录。游标定义SELECT查询,该查询用于选择要由这些FETCH语句检索的记录。可以发出一条CLOSE语句来关闭(但不是删除)游标。
作为SQL语句,仅嵌入式SQL支持DECLARE。对于动态SQL,可以使用简单的SELECT语句(不带INTO子句),也可以使用动态SQL和嵌入式SQL的组合。使用ODBC API通过ODBC支持等效操作。
DECLARE声明只进(不可滚动)游标。提取操作从查询结果集中的第一条记录开始,并按顺序遍历结果集记录。一次提取只能提取一次记录。
本文解释了如何使用 InterSystems IRIS Native 从 .NET 应用程序访问 InterSystems IRIS®数据平台 globals。IRIS Native 还允许您运行ObjectScript 方法、函数和Routine。在本文中,您首先将连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 .NET 应用程序中执行。
为了让您体验 IRIS Native,而又不陷入细节困境,本次探索特意设计得很简洁。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆!
Globals 简介
InterSystems IRIS 提供了一种易于使用的方法来将数据存储在持久的多维数组中。global 是存储在 InterSystems IRIS 物理数据库中的多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。
视图可用于更新视图所基于的表。可以通过视图插入新行,更新通过视图看到的行中的数据,以及删除通过视图看到的行。如果CREATE VIEW语句指定了此功能,则可以为视图发出INSERT、UPDATE和DELETE语句。要允许通过视图进行更新,请在定义视图时指定WITH CHECK选项(默认值)。
注意:如果视图基于分片表,则不能通过WITH CHECK OPTION视图进行INSERT、UPDATE或DELETE操作。
尝试这样做会导致一个SQLCODE -35,其中%msg INSERT/UPDATE/DELETE not allowed for view (sample.myview) based on sharded table with check option conditions。
若要防止通过视图进行更新,请指定WITH READ ONLY。尝试通过使用READ ONLY创建的视图执行插入、更新或删除操作会生成SQLCODE-35错误。
要通过视图进行更新,必须具有要更新表或视图的适当权限,如GRANT命令所指定。
通过视图更新受以下限制:
READONLY=1。创建视图
CREATE [OR REPLACE] VIEW view-name [(column-commalist)]
AS select-statement
[ WITH READ ONLY | WITH [level] CHECK OPTION ]
view-name - 正在创建的视图的名称。有效的标识符,受与表名相同的附加命名限制。视图名称可以是限定的(schema.viewname),也可以是不限定的(Viewname)。未限定的视图名称采用默认架构名称。请注意,同一架构中的表和视图不能使用相同的名称。column-commalist - 可选-组成视图的列名、一个或多个有效标识符。如果指定,此列表括在圆括号中,列表中的项目用逗号分隔。AS select-statement - 定义视图的SELECT语句。WITH READ ONLY - 可选-指定不能通过此视图对视图所基于的表执行插入、更新或删除操作。默认情况下,允许通过视图执行这些操作,但要遵守下面描述的约束条件。WITH level CHECK OPTION - 可选-指定如何通过此视图对视图所基于的表执行插入、更新或删除操作。级别可以是关键字LOCAL或CASCADED