文章 姚 鑫 · 十月 20, 2021 6m read

第五十一章 SQL命令 HAVING(二)

In和%INLIST谓词

IN谓词用于将值与一系列非结构化的项进行匹配。

%INLIST谓词是 IRIS扩展,用于将值与列表结构的元素进行匹配。

使用任一谓词,都可以执行相等比较和子查询比较。

在中有两种格式。第一个用作使用与OR运算符链接在一起的多个相等比较的速记。例如:

SELECT Name, Home_State FROM Sample.Person
GROUP BY Home_State
HAVING Home_State IN ('ME','NH','VT','MA','RI','CT')

如果Home_State等于括号列表中的任意值,则计算为TRUE。列表元素可以是常量或表达式。排序规则适用于IN比较,因为它适用于相等性测试。默认情况下,IN比较使用字段定义的排序规则类型;默认情况下,字符串字段定义为SQLUPPER,不区分大小写。

当日期或时间用于IN谓词相等比较时,会自动执行适当的数据类型转换。如果HAVING子句字段是TIMESTAMP类型,则DATETIME类型的值将转换为TIMESTAMP。如果HAVING子句字段为DATE类型,则TIMESTAMPSTRING类型的值将转换为DATE。如果HAVING子句字段为TIME类型,则TIMESTAMPSTRING类型的值将转换为TIME

0
0 133
文章 姚 鑫 · 十月 19, 2021 5m read

第五十章 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子句之前。

SELECT语句的HAVING子句限定或取消查询选择中的特定行。符合条件的行是条件表达式为真的行。条件表达式是一系列逻辑测试(谓词),它们可以通过ANDOR逻辑运算符链接起来。

HAVING子句类似于WHERE子句,它可以在组上操作,而不是在整个数据集上操作。因此,在大多数情况下,HAVING子句要么与使用%AFTERHAVING关键字的聚合函数一起使用,要么与GROUP BY子句结合使用,或者两者兼而有之。

HAVING子句条件表达式还可以指定聚合函数。WHERE子句条件表达式不能指定聚合函数。

0
0 169
文章 姚 鑫 · 十月 18, 2021 8m read

第四十九章 SQL命令 GROUP BY

SELECT子句,它根据一个或多个列对查询的结果行进行分组。

大纲

SELECT ...
GROUP BY field {,field2}

参数

  • field - 从其中检索数据的一个或多个字段。 单个字段名或以逗号分隔的字段名列表。

描述

GROUP BYSELECT命令的一个子句。 可选的GROUP BY子句出现在FROM子句和可选的WHERE子句之后,可选的HAVINGORDER BY子句之前。

GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。 当将SELECTGROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。 GROUP BYNULL(没有指定值)字段作为一个独立的值组。

GROUP BY子句在概念上类似于 IRIS聚合函数扩展关键字%FOREACH,但是GROUP BY操作整个查询,而%FOREACH允许在子填充上选择聚合,而不限制整个查询填充。

GROUP BY可以在INSERT命令的SELECT子句中使用。 不能在UPDATEDELETE命令中使用GROUP BY

指定字段

GROUP BY子句最简单的形式指定单个字段,如GROUP BY City。 这将为每个惟一的City值选择任意一行。

0
0 141
文章 Nicky Zhu · 十月 18, 2021 11m read

目录

技术概要: 基于角色的访问控制 1

  1. 基于角色的访问控制:为什么它很重要? 1
  2. 基于角色的访问控制:如何在 InterSystems IRIS 中工作 1
    1. 简要概念概述 1
    2. 示例用例 2
  3. 基于角色的访问控制:探索它 3
    1. 用前须知 3
    2. 发现管理门户(Management Portal)页面访问所需的资源 3
    3. 创建和分配您自己的管理者角色 4
    4. 创建用户并分配新角色 5
    5. 尝试管理门户(Management Portal)中的角色 6
  4. 了解有关基于角色的访问控制的更多信息 7

技术概要:基于角色的访问控制

本文档向您介绍基于角色的访问控制,解释它在 InterSystems IRIS®数据平台中的工作原理,并帮助您亲自探索。

要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。

基于角色的访问控制:为什么它很重要?

当您首次开始使用一个新的数据库平台时,有件事情可能很快就会变得清晰起来:您可能不希望企业中的所有用户都查看和更改系统上的所有内容。

0
0 209
文章 姚 鑫 · 十月 17, 2021 7m read

第四十八章 SQL命令 GRANT(二)

GRANT COLUMN-权限

列权限授予用户或角色对指定表或视图上的指定列列表的指定权限。这允许访问某些表列,而不允许访问同一表的其他列。这提供了比GRANT OBJECT-PRIVICATION选项更具体的访问控制,后者定义了整个表或视图的权限。向被授权者授予权限时,应为表授予表级权限或列级权限,但不能同时授予两者。SELECTINSERTUPDATEREFERENCES权限可用于授予对单个列中数据的访问权限。

对具有GRANT OPTION的表具有SELECTINSERTUPDATEREFERENCES对象权限的用户可以向其他用户授予该表的列的相同类型的列权限。

可以指定单个列,也可以指定逗号分隔的列列表。列列表必须用括号括起来。列名可以按任意顺序指定,允许重复。将COLUMN特权授予已具有该特权的列不起作用。

以下示例授予两列的UPDATE权限:

GRANT UPDATE(Name,FavoriteColors) ON Sample.Person TO Deborah

可以授予表或视图的列特权。可以向任何类型的被授权者授予列权限,包括用户列表、角色列表、*_PUBLIC。但是,不能将星号(*)通配符用于权限、字段名或表名。

如果用户将新记录插入到表中,则只会将数据插入到已授予列权限的那些字段中。

0
0 148
文章 姚 鑫 · 十月 16, 2021 8m read

第四十七章 SQL命令 GRANT(一)

向用户或角色授予特权。

大纲

GRANT admin-privilege TO grantee [WITH ADMIN OPTION]

GRANT role TO grantee [WITH ADMIN OPTION] 

GRANT object-privilege ON object-list TO grantee [WITH GRANT OPTION]

GRANT SELECT ON CUBE[S] object-list TO grantee [WITH GRANT OPTION]

GRANT column-privilege (column-list) ON table TO grantee  [WITH GRANT OPTION]  

参数

  • grantee - 一个或多个用户或角色的逗号分隔列表。 有效值是用户列表、角色列表、“*”或_PUBLIC。 星号(*)指定当前定义的所有没有% all角色的用户。 _PUBLIC关键字指定所有当前定义的和尚未定义的用户。
  • admin-privilege - 被授予的管理级别特权或以逗号分隔的管理级别特权列表。
0
0 226
文章 姚 鑫 · 十月 15, 2021 8m read

[toc]

第四十六章 SQL命令 FROM(二)

%PARALLEL

这个可选关键字在查询的FROM子句中指定。 它建议 IRIS使用多个处理器(如果适用)并行处理查询。 这可以显著提高使用一个或多个COUNTSUMAVGMAXMIN聚合函数和/或GROUP BY子句的某些查询的性能,以及许多其他类型的查询。 这些通常是处理大量数据并返回小结果集的查询。 例如,SELECT AVG(SaleAmt) FROM %PARALLEL User.AllSales GROUP BY Region使用并行处理。

既指定单个字段又指定聚合函数且不包含GROUP BY子句的查询不能执行并行处理。 例如,SELECT Name,AVG(Age) FROM %PARALLEL SamplePerson不执行并行处理,而是从SELECT Name,AVG(Age) FROM %PARALLEL Sample.Person GROUP BY Home_State执行并行处理。

%PARALLEL用于SELECT查询及其子查询。 INSERT命令子查询不能使用%PARALLEL

指定%PARALLEL可能会降低某些查询的性能。 在具有多个并发用户的系统上使用%PARALLEL运行查询可能会导致整体性能下降。

注意:指定%PARALLEL的查询必须在读/写而不是只读的数据库中运行。 否则,可能发生错误。

0
0 166
问题 Honghui Tan · 十月 14, 2021

Mysql里有sql_safe_updates参数,可以限制不带where条件的update/delete语句执行失败,这个参数设置后,可以防止业务bug/漏洞导致把整个表都更新或者删除(线上发生过的案例),也可以防止在线误操作更新/删除整张表。

请问Cache或者IRIS中有相关的设置吗?翻了下帮助文档,没找到,有个话,告诉下是哪个设置?谢谢

1
0 192
文章 姚 鑫 · 十月 14, 2021 9m read

第四十五章 SQL命令 FROM(一)

一个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

0
0 161
文章 姚 鑫 · 十月 13, 2021 2m read

第四十四章 SQL命令 FREEZE PLANS

冻结查询计划。

大纲

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”的查询计划。

0
0 123
文章 姚 鑫 · 十月 12, 2021 3m read

第四十三章 SQL命令 FETCH

重新定位游标,并从中检索数据。

大纲

FETCH cursor-name [INTO host-variable-list ]

参数

  • cursor-name - 当前打开的游标的名称。 游标名称是在DECLARE命令中指定的。 游标名称区分大小写。
  • INTO host-variable-list - 可选—将取操作列中的数据放入局部变量中。 host-variable-list指定一个主机变量或一个逗号分隔的主机变量列表,它们是包含与游标关联的数据的目标。 INTO句是可选的。 如果没有指定,FETCH语句只定位游标。

描述

在嵌入式SQL应用程序中,FETCH语句从游标检索数据。 所需的操作顺序是:DECLAREOPENFETCHCLOSE。 在未打开的游标上尝试FETCH会导致SQLCODE -102错误。

作为SQL语句,这只在嵌入式SQL中得到支持。 通过ODBC使用ODBC API支持等价的操作。

INTO子句可以指定为DECLARE语句的子句,也可以指定为FETCH语句的子句,或者两者都指定。 INTO子句允许将fetch列中的数据放到本地主机变量中。 列表中的每个主机变量,从左到右,都与游标结果集中的相应列相关联。 每个变量的数据类型必须匹配或支持对应结果集列的数据类型的隐式转换。 变量的数量必须与游标选择列表中的列数匹配。

0
0 186
文章 姚 鑫 · 十月 11, 2021 5m read

第四十二章 SQL命令 EXPLAIN

返回指定查询的查询计划。

大纲

EXPLAIN [ALT] [STAT]  [INTO :host-variable] query

参数

  • ALT - 可选-返回备用查询计划。默认情况下,返回单个查询计划。
  • STAT - 可选-(仅限动态SQL):返回查询计划运行时性能统计信息。默认情况下,返回不带运行时统计信息的查询计划。对于嵌入式SQL,此语法被忽略。
  • INTO :host-variable - 可选-(仅限嵌入式SQL):放置查询计划的输出主机变量。对于动态SQL,此语法被忽略。
  • query - SELECT query

描述

EXPLAIN命令以xml标记文本字符串的形式返回指定查询的查询计划。 该查询计划作为一个结果集返回,该结果集由一个名为plan的字段组成。

查询必须是SELECT查询。 EXPLAIN不能用于创建查询计划的其他SQL操作,例如带SELECT子句的INSERT。 指定不以SELECT关键字开始的查询将导致SQLCODE -51。 可以使用Show Plan显示非select查询的查询计划。

ALTSTAT关键字可以以任何顺序指定。 INTO关键字必须在这些关键字之后指定。

可选的ALT关键字生成备用查询计划。 所有备用查询计划都以相同的xml标记文本字符串返回。 规范化查询文本(标记为)在每个查询计划之前列出。

0
0 135
文章 姚 鑫 · 十月 10, 2021 3m read

第四十一章 SQL命令 DROP VIEW

删除视图

大纲

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()方法来确定指定用户是否具有删除权限。

0
0 186
文章 姚 鑫 · 十月 9, 2021 1m read

第四十章 SQL命令 DROP USER

删除用户帐户。

大纲

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方法。

0
0 106
文章 Qianzhu Liu · 十月 9, 2021 5m read

手术室是医疗机构最重要和最紧缺的医疗资源之一,也是节奏最快、强度最高、人员最密、责任最大的临床场景之一。传统基于人工和纸质的手术申请、手术排期、手术记录和交接转移等耗费了医务人员大量的时间和精力,导致手术室资源运用效率欠佳,且数据时限性与准确性均有待提高。医学信息系统问世和应用后,手术室系统的实施与优化一直是临床用户与医学信息工作者共同热议的话题。

手术室系统既可以作为整体医学信息系统的一部分,也可以作为单独的产品/模块与其他系统对接。鉴于手术室系统过于庞大和精细,本文只挑选其中的“临床记录表”功能进行探讨。

1. 化零为整临床记录表

手术过程中会产生诸多数据,这些数据可能来自于患者(生命体征、出入量等)、仪器(心电监护仪、呼吸机、麻醉机、、输液泵等)或者其他系统(电子病历系统、医嘱系统、耗材系统等),分别由不同角色(医生、护士、麻醉师、药剂师等)进行录入和传输。为了让手术核心参与人员方便的获取全部所需数据,手术室系统首先应该做到“化零为整”的前端展示。图1中的“临床记录表”大体分为4个部分:

行动栏:医务人员通过行动栏中的行动项目,可以清晰的获知在当前场景下需要完成的工作内容,手术医生、麻醉医生、手术室护士等角色均可根据自己的职责和任务单独创建行动栏。

搜索栏:医务人员通过搜索栏中的预设选项,可以自由切换数据类别,并根据临床需要,查看不同时间段的不同颗粒度的数据。

0
0 266
文章 姚 鑫 · 十月 8, 2021 4m read

第三十九章 SQL命令 DROP TRIGGER

删除触发器

大纲

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特权。

0
0 146
文章 姚 鑫 · 十月 7, 2021 6m read

第三十八章 SQL命令 DROP TABLE

删除表及其数据(可选)。

大纲

DROP TABLE table 
     [RESTRICT | CASCADE] [%DELDATA | %NODELDATA]

参数

  • table - 要删除的表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。 没有使用架构搜索路径值。
  • RESTRICTCASCADE - 可选-限制仅允许删除没有依赖视图或完整性约束的表。如果未指定关键字,则默认设置为RESTRITIONCASCADE允许删除具有依赖视图或完整性约束的表;作为表删除的一部分,任何引用视图或完整性约束也将被删除。外键约束不支持CASCADE关键字选项。
  • %DELDATA%NODELDATA - 可选-这些关键字指定在删除表时是否删除与表关联的数据。默认情况下,删除表格数据。

描述

DROP TABLE命令删除一个表及其对应的持久化类定义。如果该表是其架构中的最后一项,则删除该表也会删除该架构及其相应的持久化类包。

默认情况下,DROP TABLE同时删除表定义和表数据(如果存在)。%NODELDATA关键字允许指定删除表定义,但不能指定删除表的数据。

DROP TABLE删除与该表关联的所有索引和触发器。

要删除表格,必须满足以下条件:

  • 该表必须存在于当前命名空间中。
0
0 283
文章 姚 鑫 · 十月 6, 2021 2m read

第三十七章 SQL命令 DROP ROLE

删除角色

大纲

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方法。

0
0 123
文章 姚 鑫 · 十月 5, 2021 2m read

第三十六章 SQL命令 DROP QUERY

删除查询

大纲

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错误(权限冲突)。

如果包含查询定义的类定义是已部署的类,则不能删除该查询。

0
0 117
文章 姚 鑫 · 十月 4, 2021 3m read

第三十五章 SQL命令 DROP PROCEDURE

删除存储过程

大纲

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错误(权限冲突)。

0
0 155
文章 姚 鑫 · 十月 3, 2021 3m read

第三十四章 SQL命令 DROP METHOD

删除方法

大纲

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错误(权限冲突)。

如果包含方法定义的类定义是已部署的类,则不能删除该方法。

0
0 114
文章 姚 鑫 · 十月 2, 2021 6m read

第三十三章 SQL命令 DROP INDEX

删除索引。

大纲

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-nameON 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索引。

0
0 166
文章 姚 鑫 · 十月 1, 2021 2m read

第三十二章 SQL命令 DROP FUNCTION

删除函数

大纲

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错误(权限冲突)。

如果包含函数定义的类定义是已部署的类,则不能删除该函数。

0
0 164
文章 姚 鑫 · 九月 30, 2021 3m read

第三十一章 SQL命令 DROP DATABASE

删除数据库(命名空间)。

大纲

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方法。

0
0 160
文章 姚 鑫 · 九月 29, 2021 1m read

第三十章 SQL命令 DROP AGGREGATE

删除用户定义的聚合函数。

大纲

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的所有缓存查询。

0
0 131
文章 姚 鑫 · 九月 29, 2021 9m read

第二十九章 SQL命令 DISTINCT

指定仅返回不同值的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子句相同;如果指定ALLSELECT将返回表中满足选择条件的所有行。

DISTINCT从句有两种形式:

  • SELECT DISTINCT:为选择项值的每个唯一组合返回一行。可以指定一个或多个选择项。例如,以下查询返回一行,其中包含Home_StateAge值的每个唯一组合的Home_StateAge值:
SELECT DISTINCT Home_State,Age FROM Sample.
0
0 571
文章 姚 鑫 · 九月 28, 2021 4m read

第二十八章 SQL命令 DELETE(二)

示例

以下两个示例都删除了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)

嵌入式SQL和动态SQL示例

在下面的一组程序示例中,第一个程序创建了一个名为SQLUser.WordPair的表,该表有三列。下一个程序插入六条记录。后续程序使用基于指针的嵌入式SQL删除所有英语记录,并使用动态SQL删除所有法语记录。最后一个程序显示剩余的记录,然后删除该表。

ClassMethod Delete1()
{
	&sql(
		CREATE TABLE SQLUser.
0
0 112