0 关注者 · 478 帖子

SQL 是在关系数据库中存储、操作和检索数据的标准语言。

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

第二章 SQL谓词的概述(二)

谓词和%SelectMode

所有谓词都使用逻辑(内部存储)数据值进行比较。 但是,有些谓词可以对谓词值执行格式模式转换,将谓词值从ODBCDisplay格式转换为Logical格式。 其他谓词不能执行格式模式转换,因此必须始终以Logical格式指定谓词值。

执行格式模式转换的谓词确定是否需要从匹配字段的数据类型(如DATE``%List)进行转换,并确定从%SelectMode设置进行转换的类型。 如果%SelectMode设置为逻辑格式以外的值(例如%SelectMode=ODBC%SelectMode=Display),则必须以正确的ODBC或Display格式指定谓词值。

0
0 69
文章 姚 鑫 · 十一月 30, 2021 1m read

第一章 SQL谓词的概述(一)

描述计算结果为真或假的逻辑条件。

使用谓词

谓词是一个条件表达式,其计算结果为布尔值(truefalse)。

谓词可以如下使用:

  • SELECT语句的WHERE子句或HAVING子句中确定哪些行与特定查询相关。 注意,不是所有谓词都可以在HAVING子句中使用。
  • JOIN操作的ON子句中确定哪些行与连接操作相关。
  • UPDATEDELETE语句的WHERE子句中,确定要修改哪些行。
  • WHERE CURRENT OF语句的AND子句中。
  • CREATE TRIGGER语句的WHEN子句中确定何时应用触发操作代码。

谓词列表

每个谓词包含一个或多个比较操作符,可以是符号,也可以是关键字子句。 SQL支持以下比较操作符:

0
0 95
文章 姚 鑫 · 十一月 28, 2021 2m read

第九十章 SQL命令 WHERE CURRENT OF

使用游标指定当前行的UPDATE/DELETE子句。

大纲

WHERE CURRENT OF cursor

参数

  • cursor - 指定在光标的当前位置执行操作,光标是指向表的光标。

描述

WHERE CURRENT OF子句可用于基于游标的嵌入式SQL UPDATEDELETE语句,以指定位于要更新或删除记录上的游标。 例如:

   &sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)

删除最后一个FETCH命令从“EmployeeCursor”游标获得的行。

嵌入式SQL UPDATEDELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。 如果指定的UPDATEDELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。

更新的限制

0
0 77
文章 姚 鑫 · 十一月 27, 2021 4m read

第八十九章 SQL命令 WHERE(二)

相等比较谓词

下面是可用的相等比较谓词:

PredicateOperation
=Equals
<>Does not equal
!=Does not equal
>Is greater than
<Is less than
>=Is greater than or equal to
<=Is less than or equal to

例如:

SELECT Name, Age FROM Sample.Person
WHERE Age < 21

SQL根据排序规则(值的排序顺序)定义了比较操作。 如果两个值以完全相同的方式排序,则它们相等。 如果一个值排在第二个值之后,则该值大于另一个值。 字符串字段排序规则接受字段的默认排序规则。 IRIS默认排序规则不区分大小写。 因此,两个字符串字段值的比较或字符串字段值与字符串文字的比较(默认情况下)是不区分大小写的。 例如,如果Home_State字段值是两个字母的大写字符串:

0
0 66
文章 姚 鑫 · 十一月 26, 2021 2m read

第八十八章 SQL命令 WHERE(一)

指定一个或多个限制性条件的SELECT子句。

大纲

SELECT fields
FROM table
WHERE condition-expression

参数

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

描述

可选的WHERE子句可以用于以下目的:

  • 指定限制要返回哪些数据值的谓词。
  • 指定两个表之间的显式连接。
  • 指定基表和另一个表中的字段之间的隐式连接。

WHERE子句最常用于指定一个或多个谓词,这些谓词用于限制SELECT查询或子查询检索到的数据(过滤出行)。 还可以在UPDATE命令、DELETE命令或INSERT(或INSERT or UPDATE)命令的结果集中使用WHERE子句。

WHERE子句限定或取消查询选择中的特定行。 符合条件的行是那些条件表达式为真的行。 条件表达式可以是一个或多个逻辑测试(谓词)。 多个谓词可以通过ANDOR逻辑操作符链接。

如果谓词包含除法,并且数据库中有任何值可以生成值为零或NULL的除法,则不能依赖求值顺序来避免被零除法。 相反,使用CASE语句来抑制风险。

WHERE子句可以指定包含子查询的条件表达式。子查询必须用圆括号括起来。

WHERE子句可以使用=(内部连接)符号连接操作符指定两个表之间的显式连接。

0
0 127
文章 姚 鑫 · 十一月 25, 2021 4m read

第八十七章 SQL命令 VALUES

指定字段中使用的数据值的INSERT/UPDATE子句。

大纲

(field1{,fieldn})
     VALUES (value1{,valuen})

参数

  • field - 字段名或以逗号分隔的字段名列表。
  • value - 值或以逗号分隔的值列表。 每个值被赋给相应的字段。

描述

VALUES子句用于INSERTUPDATEINSERT or UPDATE语句中,以指定要插入到字段中的数据值。 通常:

  • INSERT查询使用以下语法:
INSERT INTO tablename (fieldname1,fieldname2,...)
     VALUES (value1,value2,...)
  • UPDATE查询使用以下语法:
UPDATE tablename (fieldname1,fieldname2,...)
     VALUES (value1,value2,...)

VALUES子句中的元素依次对应于表名后面指定的字段。 注意,如果在VALUES子句中只指定了一个value元素,则没有必要将元素括在括号中。

下面的嵌入式SQL示例显示了一个INSERT语句,它向“Employee”表添加了一行:

0
0 98
文章 姚 鑫 · 十一月 24, 2021 2m read

第八十六章 SQL命令 USE DATABASE

设置当前名称空间和数据库。

大纲

USE [DATABASE] dbname

参数

  • dbname - 当前进程将使用的名称空间和相应的数据库作为当前名称空间。

描述

USE DATABASE命令将当前进程切换到指定的名称空间及其关联的数据库。 这允许在SQL中更改名称空间。 DATABASE关键字是可选的。

指定的dbname是所需的命名空间和包含数据库文件的对应目录的名称。 指定dbname作为标识符。 命名空间名称不区分大小写。

由于USERSQL保留字,因此必须使用分隔标识符来指定用户命名空间,如下面的SQL Shell示例所示:

USER>>USE DATABASE Samples
SAMPLES>>USE DATABASE "User"
USER>>

如果指定的dbname不存在,IRIS将发出SQLCODE -400错误。

USE DATABASE命令是一个特权操作。 在使用USE DATABASE之前,必须以具有适当权限的用户身份登录。 如果不这样做,将导致SQLCODE -99错误(特权冲突)。

使用$SYSTEM.Security.Login()方法为用户分配适当的权限:

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )
0
0 106
文章 姚 鑫 · 十一月 23, 2021 3m read

第八十五章 SQL命令 UPDATE(四)

示例

本节中的示例更新SQLUser.MyStudents表。 下面的示例创建SQLUser.MyStudents表,并用数据填充它。 因为这个示例的重复执行会积累具有重复数据的记录,所以它使用TRUNCATE TABLE在调用INSERT之前删除旧数据。 在调用UPDATE示例之前执行这个示例:

0
0 73
文章 姚 鑫 · 十一月 22, 2021 6m read

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

参照完整性

如果没有指定%NOCHECK, IRIS将使用系统范围的配置设置来确定是否执行外键引用完整性检查; 默认值是执行外键引用完整性检查。 可以在系统范围内设置此默认值,如外键引用完整性检查中所述。 要确定当前系统范围的设置,调用$SYSTEM.SQL.CurrentSettings()

此设置不适用于用NOCHECK关键字定义的外键。

UPDATE操作期间,对于每个具有更新字段值的外键引用,都会在被引用表中的旧(更新前)引用行和新(更新后)引用行上获得共享锁。 这些行在执行引用完整性检查和更新行时被锁定。 然后释放锁(直到事务结束才持有锁)。 这确保了引用的行不会在引用完整性检查和更新操作完成之间发生更改。 锁定旧行可以确保在可能的UPDATE回滚之前不会更改所引用的行。 锁定新行可以确保引用的行不会在引用完整性检查和更新操作完成之间发生更改。

如果对CASCADESET NULLSET DEFAULT定义的外键字段执行了带有%NOLOCKUPDATE操作,则相应的更改外键表的引用操作也会使用%NOLOCK

原子性

0
0 135
文章 姚 鑫 · 十一月 21, 2021 9m read

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

显示到逻辑数据转换

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

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

列表结构

IRIS支持列表结构数据类型%list(数据类型类%Library.List)。 这是一种压缩的二进制格式,并不映射到 SQL的相应本机数据类型。 它对应的数据类型为VARBINARY,默认MAXLEN32749。 因此,动态SQL不能使用UPDATEINSERT来设置类型为%List的属性值。

流值

可以按照如下方法更新流字段中的数据值:

  • 对于任何表:字符串字面值或包含字符串字面值的主机变量,例如:
0
0 71
文章 姚 鑫 · 十一月 20, 2021 8m read

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

为指定表中的指定列设置新值。

大纲

UPDATE [%keyword] table-ref [[AS] t-alias]
   value-assignment-statement 
   [FROM [optimize-option] select-table [[AS] t-alias]
         {, select-table2 [[AS] t-alias]} ]
   [WHERE condition-expression]

UPDATE [%keyword] table-ref [[AS] t-alias]
   value-assignment-statement
   [WHERE CURRENT OF cursor]

value-assignment-statement ::=
   SET column1 = scalar-expression1 {,column2 = scalar-expression2} ...  |
   [ (column1 {,column2} ...) ] VALUES (scalar-expression1 {,scalar-expression2} ...)  |
   VALUES :array()

参数

0
0 126
文章 姚 鑫 · 十一月 19, 2021 2m read

第八十一章 SQL命令 UNLOCK

解锁表

大纲

UNLOCK [TABLE] tablename IN EXCLUSIVE MODE [IMMEDIATE]

UNLOCK [TABLE] tablename IN SHARE MODE [IMMEDIATE]

参数

  • tablename - 要解锁的表的名称。 Tablename必须是已经存在的表。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。 模式搜索路径被忽略。
  • IN EXCLUSIVE MODE / IN SHARE MODE - IN EXCLUSIVE MODE关键字短语释放常规的IRIS锁。 IN SHARE MODE关键字短语在IRIS级别释放共享锁。

描述

UNLOCK命令用来解锁被LOCK命令锁定的SQL表。 此表必须是已存在的表,您对其具有必要的特权。 如果tablename是临时表,则命令执行成功,但不执行任何操作。 如果tablename是视图,则命令失败,并出现SQLCODE -400错误。

UNLOCKUNLOCK TABLE是同义词。

UNLOCK命令用来反转LOCK操作。 即使没有锁被持有,UNLOCK命令也会成功完成。 可以使用LOCK多次锁定一个表; 必须显式解锁表,解锁次数为表被显式锁定的次数。

权限

0
0 95
文章 姚 鑫 · 十一月 18, 2021 9m read

第八十章 SQL命令 UNION

组合两个或多个SELECT语句。

大纲

select-statement {UNION [ALL] [%PARALLEL] select-statement}

select-statement {UNION [ALL]  [%PARALLEL] (query)}

(query) {UNION [ALL]  [%PARALLEL] select-statement}

(query) {UNION [ALL]  [%PARALLEL] (query)}

参数

  • ALL - 可选——关键字字面量。 如果指定,则返回重复的数据值。 如果省略,重复的数据值将被抑制。
  • %PARALLEL - 可选—%PARALLEL关键字。 如果指定,则union的每一边都作为单独的进程并行运行。
  • select-statement - 从数据库中检索数据的SELECT语句。
  • query - 组合一个或多个SELECT语句的查询。

描述

UNION将两个或多个查询组合为一个查询,该查询将数据检索到结果中。 由UNION组合的查询可以是由单个SELECT语句组成的简单查询,也可以是复合查询。

0
0 153
文章 姚 鑫 · 十一月 16, 2021 4m read

第七十八章 SQL命令 TUNE TABLE

基于代表性数据调优表。

大纲

TUNE TABLE tablename [ tune_options ]

参数

  • tablename - 要调优的现有表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • tune_options - 可选—如果指定,一个或多个TUNE TABLE选项,以任意顺序指定,由空格分隔。 这些tune_options不区分大小写。

描述

TUNE TABLE命令根据表中当前的数据对现有表进行调优。 该数据应该代表表完全填充时所期望的数据。

TUNE TABLE根据代表性数据计算和设置表的块大小、选择性和范围大小。 通常,TUNE TABLE设置一个或多个这些值,并清除所有使用这个持久类(表)的缓存查询,以便查询将使用这些新值。 但是,如果TUNE TABLE没有更改这些值(例如,自上次对该表运行TUNE TABLE以来数据没有更改),则缓存查询不会被清除,该表的类定义也不会被标记为需要重新编译。

0
0 92
文章 姚 鑫 · 十一月 15, 2021 6m read

第七十七章 SQL命令 TRUNCATE TABLE

从表中删除所有数据并重置计数器。

大纲

TRUNCATE TABLE [restriction] tablename

参数

  • restriction - 可选—以下限制关键字中的一个或多个,用空格隔开:%NOCHECK%NOLOCK
  • tablename - 要从中删除所有行的表。 还可以指定一个可更新视图,通过该视图可以删除表中的所有行。 表名(或视图名)可以是限定的(schema.table)或非限定的(table)。 使用模式搜索路径(如果提供的话)或默认模式名将非限定名称匹配到其模式。

描述

TRUNCATE TABLE命令从表中删除所有行,并重置所有表计数器。 可以直接截断表,也可以通过视图截断表。 通过视图截断表会受到删除要求和限制,如CREATE view中所述。

TRUNCATE TABLE重置用于生成RowID字段、IDENTITY字段和SERIAL (%Library.Counter)字段连续整数值的内部计数器。 IRIS为插入到TRUNCATE表后的表中的第一行中的这些字段赋值为1。 对表的所有行执行DELETE操作不会重置这些内部计数器。

TRUNCATE TABLE重置用于在数据插入到流字段时生成流字段OID值的内部计数器。 对表的所有行执行DELETE操作不会重置此内部计数器。

0
0 79
文章 姚 鑫 · 十一月 14, 2021 8m read

第七十六章 SQL命令 TOP

指定返回多少行的SELECT子句。

大纲

SELECT  [DISTINCT clause] 
  [TOP {[((]int[))] | ALL}]
  select-item{,select-item}

参数

  • int - 限制返回到指定整数的行数。 int参数可以是一个正整数、一个动态SQL输入参数(?)或一个解析为正整数的嵌入式SQL主机变量(:var)。在动态SQL中,int值可以选择用单括号或双括号括起来(双括号是首选语法); 这些括号禁止在相应的缓存查询中对int值进行文字替换。
  • ALL - TOP ALL仅在子查询或CREATE VIEW语句中有意义。 它用于在这些情况下支持使用ORDER BY子句,满足在子查询或CREATE VIEW中使用的查询中ORDER BY子句必须与TOP子句配对的要求。 TOP ALL不限制返回的行数。

描述

可选的TOP子句出现在SELECT关键字和可选的DISTINCT子句之后,以及第一个选择项之前。

TOP关键字用于动态SQL和基于指针的嵌入式SQL。 在非游标嵌入式SQL中,TOP关键字的唯一有意义的用法是TOP 0。 任何其他TOP int(其中int是任何非零整数)都是有效的,但没有意义,因为非游标嵌入式SQL中的SELECT总是最多返回一行数据。

0
0 160
文章 姚 鑫 · 十一月 13, 2021 11m read

第七十五章 SQL命令 START TRANSACTION

开始一个事务。

大纲

START TRANSACTION [%COMMITMODE commitmode]

START TRANSACTION [transactionmodes]

参数

  • commitmode - 可选-指定在当前进程中如何向数据库提交将来的事务。 取值包括EXPLICITIMPLICITNONE。 默认是维护现有的提交模式; 进程的初始提交模式默认值是IMPLICIT
  • transactionmodes - 可选—指定事务的隔离模式和访问模式。 可以将隔离模式、访问模式或这两种模式的值指定为逗号分隔的列表。隔离模式的有效值为ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL READ UNCOMMITTED, ISOLATION LEVEL READ VERIFIED. 默认 ISOLATION LEVEL READ UNCOMMITTED.访问模式的有效值为“READ ONLY”“READ WRITE”。 注意,只有隔离级别READ COMMITTED与读写模式READ WRITE兼容。

描述

0
0 121
文章 姚 鑫 · 十一月 12, 2021 9m read

第七十四章 SQL命令 SET TRANSACTION

设置事务的参数。

大纲

SET TRANSACTION [%COMMITMODE commitmode]

SET TRANSACTION [transactionmodes]

参数

  • %COMMITMODE commitmode - 可选-指定向数据库提交事务的方式。 取值包括EXPLICITIMPLICITNONE。 默认为IMPLICIT
  • transactionmodes - 可选—指定事务的隔离模式和访问模式。 可以将隔离模式、访问模式或这两种模式的值指定为逗号分隔的列表。隔离模式的有效值为ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL READ UNCOMMITTED, and ISOLATION LEVEL READ VERIFIED。 默认为“ISOLATION LEVEL READ UNCOMMITTED”。 访问模式的有效值为“READ ONLY”和“READ WRITE”。 注意,只有隔离级别READ COMMITTED与读写模式READ WRITE兼容。

描述

SET TRANSACTION语句为当前进程设置控制SQL事务的参数。 这些参数在下一个事务开始时生效,并在当前进程持续期间或直到显式重置为止。 它们不会在事务结束时自动重置为默认值。

0
0 76
文章 姚 鑫 · 十一月 11, 2021 8m read

第七十三章 SQL命令 SET OPTION

设置执行选项。

大纲

SET OPTION option_keyword = value

描述

SET OPTION语句用于设置执行选项,如编译模式、SQL配置设置和控制日期、时间和数字约定的区域设置。 每个set option语句只能设置一个关键字选项。

SET OPTION支持以下选项:

  • `AUTO_PARALLEL_THRESHOLD
  • COMPILEMODE
  • `DEFAULT_SCHEMA``
  • EXACT_DISTINCT
  • LOCK_ESCALATION_THRESHOLD
  • LOCK_TIMEOUT
  • PKEY_IS_IDKEY
  • SUPPORT_DELIMITED_IDENTIFIERS
  • Locale Options (date, time, and numeric conventions)

SET OPTION可以在动态SQL(包括SQL Shell)和嵌入式SQL中使用。

为了SQL兼容性,IRIS会解析其他SET OPTION参数(这里没有文档),但不执行任何操作。

因为SET OPTION的准备和执行速度很快,而且通常只运行一次,所以IRIS不会在ODBCJDBC或动态SQL中为SET OPTION创建缓存查询。

IRIS支持下列选项:

AUTO_PARALLEL_THRESHOLD

0
0 97
文章 Muhammad Waseem · 十月 16, 2021 2m read

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

  • 使用自定義實用程序函數從數據庫更新 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 消息:
 

第 1 步:首先,我們需要在數據庫中保存參考範圍,為此我使用了 TestRanges 持久類:

第 2 步:我們需要創建一個自定義函數來獲取引用範圍,為此我在實用程序類中創建了 GetReferenceRange() ClassMethod 函數。 請注意這個類應該是來自 EnsRule.FunctionSet 的擴展

 

我們需要創建另一個函數來設置異常標誌,為此我在實用程序類中創建了 SetAbnormalFlag() ClassMethod 函數

1
0 158
文章 姚 鑫 · 十一月 10, 2021 6m read

第七十二章 SQL命令 SELECT(四)

WHERE子句

WHERE子句限定或取消查询选择中的特定行。 符合条件的行是那些条件表达式为真的行。 条件表达式是逻辑测试(谓词)的列表,可以通过ANDOR逻辑操作符链接这些测试(谓词)。 这些谓词可以使用NOT一元逻辑操作符进行反转。

SQL谓词可分为以下几类:

  • Comparison 谓词
  • BETWEEN 谓词
  • LIKE 谓词
  • NULL 谓词
  • IN and %INLIST 谓词
  • EXISTS 谓词
  • FOR SOME 谓词
  • FOR SOME %ELEMENT 谓词

条件表达式不能包含聚合函数。 如果希望使用聚合函数返回的值指定选择条件,请使用HAVING子句。

WHERE子句可以使用=(内部连接)符号连接操作符指定两个表之间的显式连接。

WHERE子句可以使用箭头语法(- >)操作符在基表和来自另一个表的字段之间指定隐式连接。

GROUP BY子句

GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。 当将SELECTGROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。 GROUP BY子句在概念上类似于 IRIS扩展%FOREACH,但是GROUP BY操作整个查询,而%FOREACH允许在子填充上选择聚合,而不限制整个查询填充。 例如:

0
0 101
文章 姚 鑫 · 十一月 9, 2021 8m read

第七十一章 SQL命令 SELECT(三)

列别名

指定SELECT-ITEM时,可以使用AS关键字指定列名的别名:

SELECT Name AS PersonName, DOB AS BirthDate, ...

列别名在结果集中显示为列标题。指定列别名是可选的;始终提供默认值。列别名以指定的字母大小写显示;但是,当在ORDER BY子句中引用时,它不区分大小写。C别名必须是有效的标识符。C别名可以是分隔的标识符。使用带分隔符的标识符允许列别名包含空格、其他标点符号或作为SQL保留名称。例如,SELECT Name AS "Customer Name" or SELECT Home_State AS "From"

As关键字不是必需的,但使查询文本更易于阅读。因此,以下也是有效的语法:

SELECT Name PersonName, DOB BirthDate, ...

SQL不执行列别名的惟一性检查。 字段列和列别名可能具有相同的名称(尽管不可取),或者两个列别名相同。 当ORDER by子句引用此类非惟一列别名时,可能会导致SQLCODE -24“Ambiguous sort column”错误。 列别名与所有SQL标识符一样,不区分大小写。

0
0 195
文章 姚 鑫 · 十一月 8, 2021 9m read

第七十章 SQL命令 SELECT(二)

select-item

这是所有SELECT语句的必选元素。 通常,选择项指的是FROM子句中指定的表中的一个字段。 选择项由下列一个或多个项组成,多个项之间用逗号分隔:

  • 列名(字段名),带或不带表名别名:
SELECT Name,Age FROM Sample.Person

字段名不区分大小写。 但是,结果集中与字段关联的标签使用表定义中指定的SqlFieldName的字母大小写,而不是选择项中指定的字母大小写。

包含一个或多个下划线的字段名引用嵌入的串行对象属性。 例如,对于字段名Home_City,表包含一个引用字段Home,该字段引用定义属性City的嵌入式串行对象。 对于字段名Home_Phone_AreaCode,该表包含一个引用字段Home,该字段引用嵌入式串行对象属性Phone,该属性引用定义AreaCode属性的嵌套嵌入式串行对象。 如果选择一个引用字段,如HomeHome_Phone,则以%List数据类型格式接收串行对象中所有属性的值。

要显示RowID(记录ID),可以使用%ID伪字段变量别名,该别名显示RowID,而不管它被分配的名称是什么。 默认情况下,RowID的名称是ID,但如果存在用户定义的名为ID的字段, IRIS可能会重命名它。 默认情况下,RowID是一个隐藏字段。

0
0 123
文章 姚 鑫 · 十一月 7, 2021 10m read

第六十九章 SQL命令 SELECT(一)

从数据库中的一个或多个表中检索行。

大纲

[(] SELECT [%keyword]
    [DISTINCT [BY (item {,item2})] | ALL] 
    [TOP {int | ALL}]
    select-item {,select-item, ...}
    [INTO host-variable-list]
    [FROM [optimize-option] table-ref [[AS] t-alias]
      {,table-ref [[AS] t-alias]} ]
    [WHERE condition-expression [{AND | OR condition-expression] ]
    [GROUP BY scalar-expression]
    [HAVING condition-expression [{AND | OR condition-expression] ]
    [ORDER BY item-order-list [ASC | DESC] ]
[)]

select-item ::= 
  [t-alias.]*   |
  [t-alias.]scalar-expression [[AS] c-alias]

参数

0
0 263
文章 姚 鑫 · 十一月 6, 2021 4m read

第六十八章 SQL命令 SAVEPOINT

在事务中标记一个点。

大纲

SAVEPOINT pointname

参数

  • pointname - 保存点的名称,指定为标识符。

描述

SAVEPOINT语句标记事务中的一个点。建立保存点使能够执行事务回滚到保存点,撤消在此期间完成的所有工作并释放在此期间获得的所有锁。在长期运行的事务或具有内部控制结构的事务中,通常希望能够回滚事务的一部分,而不撤消在事务期间提交的所有工作。

保存点的建立会递增$TLEVEL事务级别计数器。回滚到保存点会将$TLEVEL事务级别计数器递减到紧接在保存点之前的值。可以在一个事务内建立最多255个保存点。超过这个保存点数量会导致SQLCODE-400致命错误,这是在SQL执行期间捕获的<TRANSACTION LEVEL> 异常。终端提示符将当前事务级别显示为提示符的TLn:前缀,其中n是介于1255之间的整数,表示当前$TLEVEL计数。

每个保存点都与一个保存点名称相关联,这是一个唯一的标识符。保存点名称不区分大小写。保存点名称可以是分隔的标识符。

  • 如果指定的保存点没有点名,或者指定的点名不是有效的标识符或SQL保留字,则会发出运行时SQLCODE-301错误。
  • 如果指定点名称以“SYS”开头的保存点,则会发出运行时SQLCODE-302错误。这些保存点名称是保留的。
0
0 101
文章 姚 鑫 · 十一月 5, 2021 4m read

第六十七章 SQL命令 ROLLBACK

回滚事务。

大纲

ROLLBACK [WORK]

ROLLBACK TO SAVEPOINT pointname

参数

  • pointname - 作为标识符指定的现有保存点的名称。

描述

ROLLBACK语句将回滚事务,撤消已执行但未提交的工作,减少$TLEVEL事务级别计数器,并释放锁。 ROLLBACK用于将数据库恢复到以前的一致状态。

  • ROLLBACK回滚当前事务期间完成的所有工作,将$TLEVEL事务级别计数器重置为0,并释放所有锁。 这会将数据库恢复到事务开始之前的状态。 ROLLBACKROLLBACK WORK是等价的语句; 这两个版本都支持兼容性。
  • ROLLBACK TO SAVEPOINT pointname将回滚自指定保存点以来已完成的所有工作,并按未完成的保存点的数量递减$TLEVEL事务级别计数器。 当所有保存点都被回滚或提交,并且事务级别计数器重置为零时,事务就完成了。 如果指定的保存点不存在,或者已经回滚,ROLLBACK将发出SQLCODE -375错误并回滚整个当前事务。

回滚到SAVEPOINT必须指定一个点名。 如果不这样做,将导致SQLCODE -301错误。

如果事务操作未能成功完成,则会发出SQLCODE -400错误。

不回滚

ROLLBACK操作不影响以下项目:

0
0 259
文章 姚 鑫 · 十一月 4, 2021 9m read

第六十六章 SQL命令 REVOKE

从用户或角色中删除特权。

大纲

REVOKE admin-privilege FROM grantee 

REVOKE role FROM grantee 

REVOKE [GRANT OPTION FOR] object-privilege
       ON object-list FROM grantee [CASCADE | RESTRICT] [AS grantor] 

REVOKE [GRANT OPTION FOR] SELECT ON CUBE[S] object-list  FROM grantee 

REVOKE column-privilege (column-list) 
      ON table FROM grantee  [CASCADE | RESTRICT]

参数

0
0 68
文章 姚 鑫 · 十一月 3, 2021 2m read

第六十五章 SQL命令 PURGE CACHED QUERIES

删除一个或多个缓存查询。

大纲

PURGE [CACHED] QUERIES

PURGE [CACHED] QUERIES BY AGE n

PURGE [CACHED] QUERIES BY TABLE table-name

PURGE [CACHED] QUERIES BY NAME class-name [, class-name]

参数

  • n - 自上次使用缓存查询以来的整数天数,指定为带引号的字符串。
  • table-name - 存在缓存查询的现有表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • class-name- 缓存的查询类名称或以逗号分隔的缓存查询类名称列表。 缓存的查询类名是区分大小写的。

描述

PURGE CACHED QUERIES命令删除指定范围内定义的缓存查询:

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

第六十四章 SQL命令 ORDER BY(二)

示例

下面的示例按照RowID的反向顺序对记录进行排序:

SELECT %ID,Name
FROM Sample.Person
ORDER BY %ID DESC

下面两个示例展示了在ORDER BY子句中指定排序列的不同方法。 下面两个查询是等价的; 第一种方法使用列名作为排序项,第二种方法使用列号(选择项列表中项目的序号):

SELECT Name,Age,Home_State
FROM Sample.Person
ORDER BY Home_State,Age DESC
SELECT Name,Age,Home_State
FROM Sample.Person
ORDER BY 3,2 DESC

下面的示例按包含IRIS列表数据的字段进行排序。 因为IRIS列表是一个以格式化字符开始的编码字符串,所以本例使用$LISTTOSTRING来按实际字段数据值排序,而不是按列表元素编码:

SELECT Name,FavoriteColors
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY $LISTTOSTRING(FavoriteColors)
0
0 85