第八十五章 SQL命令 UPDATE(四)
示例
本节中的示例更新SQLUser.MyStudents表。
下面的示例创建SQLUser.MyStudents表,并用数据填充它。
因为这个示例的重复执行会积累具有重复数据的记录,所以它使用TRUNCATE TABLE在调用INSERT之前删除旧数据。
在调用UPDATE示例之前执行这个示例:
本节中的示例更新SQLUser.MyStudents表。
下面的示例创建SQLUser.MyStudents表,并用数据填充它。
因为这个示例的重复执行会积累具有重复数据的记录,所以它使用TRUNCATE TABLE在调用INSERT之前删除旧数据。
在调用UPDATE示例之前执行这个示例:
如果没有指定%NOCHECK, IRIS将使用系统范围的配置设置来确定是否执行外键引用完整性检查;
默认值是执行外键引用完整性检查。
可以在系统范围内设置此默认值,如外键引用完整性检查中所述。
要确定当前系统范围的设置,调用$SYSTEM.SQL.CurrentSettings()。
此设置不适用于用NOCHECK关键字定义的外键。
在UPDATE操作期间,对于每个具有更新字段值的外键引用,都会在被引用表中的旧(更新前)引用行和新(更新后)引用行上获得共享锁。
这些行在执行引用完整性检查和更新行时被锁定。
然后释放锁(直到事务结束才持有锁)。
这确保了引用的行不会在引用完整性检查和更新操作完成之间发生更改。
锁定旧行可以确保在可能的UPDATE回滚之前不会更改所引用的行。
锁定新行可以确保引用的行不会在引用完整性检查和更新操作完成之间发生更改。
如果对CASCADE、SET NULL或SET DEFAULT定义的外键字段执行了带有%NOLOCK的UPDATE操作,则相应的更改外键表的引用操作也会使用%NOLOCK。
数据以逻辑模式格式存储。
例如,日期存储为整数天数,时间存储为从午夜开始的秒数,%List存储为编码字符串。
大多数其他数据,如字符串和数字,不需要转换;
无论当前模式如何,它们都以相同的格式输入、更新和存储。
对于已转换的数据,可以在LOGICAL模式(默认)中更新数据值,或者通过指定选择模式,使用更易于阅读的格式(DISPLAY模式或ODBC模式)更新数据值。
例如,通过指定选择模式,可以以DISPLAY格式(例如2/22/2018)、ODBC格式(例如2018-02-22)或逻辑格式(例如64701)更新日期。
对于某些数据类型,还可以在ODBC或DISPLAY选择模式下以LOGICAL格式指定数据。
IRIS支持列表结构数据类型%list(数据类型类%Library.List)。
这是一种压缩的二进制格式,并不映射到 SQL的相应本机数据类型。
它对应的数据类型为VARBINARY,默认MAXLEN为32749。
因此,动态SQL不能使用UPDATE或INSERT来设置类型为%List的属性值。
可以按照如下方法更新流字段中的数据值:
为指定表中的指定列设置新值。
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()
解锁表
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错误。
UNLOCK和UNLOCK TABLE是同义词。
UNLOCK命令用来反转LOCK操作。
即使没有锁被持有,UNLOCK命令也会成功完成。
可以使用LOCK多次锁定一个表;
必须显式解锁表,解锁次数为表被显式锁定的次数。
组合两个或多个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语句组成的简单查询,也可以是复合查询。
基于代表性数据调优表。
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以来数据没有更改),则缓存查询不会被清除,该表的类定义也不会被标记为需要重新编译。
欢迎大家将相关的经验在这个讨论区分享。
从表中删除所有数据并重置计数器。
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操作不会重置此内部计数器。
指定返回多少行的SELECT子句。
SELECT [DISTINCT clause]
[TOP {[((]int[))] | ALL}]
select-item{,select-item}
int - 限制返回到指定整数的行数。
int参数可以是一个正整数、一个动态SQL输入参数(?)或一个解析为正整数的嵌入式SQL主机变量(:var)。在动态SQL中,int值可以选择用单括号或双括号括起来(双括号是首选语法);
这些括号禁止在相应的缓存查询中对int值进行文字替换。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总是最多返回一行数据。
开始一个事务。
START TRANSACTION [%COMMITMODE commitmode]
START TRANSACTION [transactionmodes]
commitmode - 可选-指定在当前进程中如何向数据库提交将来的事务。
取值包括EXPLICIT、IMPLICIT和NONE。
默认是维护现有的提交模式;
进程的初始提交模式默认值是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兼容。设置事务的参数。
SET TRANSACTION [%COMMITMODE commitmode]
SET TRANSACTION [transactionmodes]
%COMMITMODE commitmode - 可选-指定向数据库提交事务的方式。
取值包括EXPLICIT、IMPLICIT和NONE。
默认为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事务的参数。
这些参数在下一个事务开始时生效,并在当前进程持续期间或直到显式重置为止。
它们不会在事务结束时自动重置为默认值。
Gartner Peer Insight 一直持续公开对各类第三方软硬件的对比,是IT行业的“大众点评“。综合转载如下,仅供参考。
原文链接:https://www.gartner.com/reviews/market/cloud-database-management-system…
Gartner Peer Insights 是Gartner 提供的由专业最终用户用来对企业级技术解决方案进行打分和评估供企业使用的平台。Gartner 会将用户意见和他们的专业意见综合起来形成魔力象限。
设置执行选项。
SET OPTION option_keyword = value
SET OPTION语句用于设置执行选项,如编译模式、SQL配置设置和控制日期、时间和数字约定的区域设置。
每个set option语句只能设置一个关键字选项。
SET OPTION支持以下选项:
COMPILEMODEEXACT_DISTINCTLOCK_ESCALATION_THRESHOLDLOCK_TIMEOUTPKEY_IS_IDKEYSUPPORT_DELIMITED_IDENTIFIERSLocale Options (date, time, and numeric conventions)SET OPTION可以在动态SQL(包括SQL Shell)和嵌入式SQL中使用。
为了SQL兼容性,IRIS会解析其他SET OPTION参数(这里没有文档),但不执行任何操作。
因为SET OPTION的准备和执行速度很快,而且通常只运行一次,所以IRIS不会在ODBC、JDBC或动态SQL中为SET OPTION创建缓存查询。
IRIS支持下列选项:
AUTO_PARALLEL_THRESHOLD分析
其他
开发
服务
系统管理
WHERE子句限定或取消查询选择中的特定行。
符合条件的行是那些条件表达式为真的行。
条件表达式是逻辑测试(谓词)的列表,可以通过AND和OR逻辑操作符链接这些测试(谓词)。
这些谓词可以使用NOT一元逻辑操作符进行反转。
SQL谓词可分为以下几类:
Comparison 谓词BETWEEN 谓词LIKE 谓词NULL 谓词IN and %INLIST 谓词EXISTS 谓词FOR SOME 谓词FOR SOME %ELEMENT 谓词条件表达式不能包含聚合函数。
如果希望使用聚合函数返回的值指定选择条件,请使用HAVING子句。
WHERE子句可以使用=(内部连接)符号连接操作符指定两个表之间的显式连接。
WHERE子句可以使用箭头语法(- >)操作符在基表和来自另一个表的字段之间指定隐式连接。
GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。
当将SELECT与GROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。
GROUP BY子句在概念上类似于 IRIS扩展%FOREACH,但是GROUP BY操作整个查询,而%FOREACH允许在子填充上选择聚合,而不限制整个查询填充。
例如:
指定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标识符一样,不区分大小写。
这是所有SELECT语句的必选元素。
通常,选择项指的是FROM子句中指定的表中的一个字段。
选择项由下列一个或多个项组成,多个项之间用逗号分隔:
SELECT Name,Age FROM Sample.Person
字段名不区分大小写。
但是,结果集中与字段关联的标签使用表定义中指定的SqlFieldName的字母大小写,而不是选择项中指定的字母大小写。
包含一个或多个下划线的字段名引用嵌入的串行对象属性。
例如,对于字段名Home_City,表包含一个引用字段Home,该字段引用定义属性City的嵌入式串行对象。
对于字段名Home_Phone_AreaCode,该表包含一个引用字段Home,该字段引用嵌入式串行对象属性Phone,该属性引用定义AreaCode属性的嵌套嵌入式串行对象。
如果选择一个引用字段,如Home或Home_Phone,则以%List数据类型格式接收串行对象中所有属性的值。
要显示RowID(记录ID),可以使用%ID伪字段变量别名,该别名显示RowID,而不管它被分配的名称是什么。
默认情况下,RowID的名称是ID,但如果存在用户定义的名为ID的字段, IRIS可能会重命名它。
默认情况下,RowID是一个隐藏字段。
从数据库中的一个或多个表中检索行。
[(] 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]
在事务中标记一个点。
SAVEPOINT pointname
pointname - 保存点的名称,指定为标识符。SAVEPOINT语句标记事务中的一个点。建立保存点使能够执行事务回滚到保存点,撤消在此期间完成的所有工作并释放在此期间获得的所有锁。在长期运行的事务或具有内部控制结构的事务中,通常希望能够回滚事务的一部分,而不撤消在事务期间提交的所有工作。
保存点的建立会递增$TLEVEL事务级别计数器。回滚到保存点会将$TLEVEL事务级别计数器递减到紧接在保存点之前的值。可以在一个事务内建立最多255个保存点。超过这个保存点数量会导致SQLCODE-400致命错误,这是在SQL执行期间捕获的<TRANSACTION LEVEL> 异常。终端提示符将当前事务级别显示为提示符的TLn:前缀,其中n是介于1和255之间的整数,表示当前$TLEVEL计数。
每个保存点都与一个保存点名称相关联,这是一个唯一的标识符。保存点名称不区分大小写。保存点名称可以是分隔的标识符。
SQLCODE-301错误。“SYS”开头的保存点,则会发出运行时SQLCODE-302错误。这些保存点名称是保留的。回滚事务。
ROLLBACK [WORK]
ROLLBACK TO SAVEPOINT pointname
pointname - 作为标识符指定的现有保存点的名称。ROLLBACK语句将回滚事务,撤消已执行但未提交的工作,减少$TLEVEL事务级别计数器,并释放锁。
ROLLBACK用于将数据库恢复到以前的一致状态。
ROLLBACK回滚当前事务期间完成的所有工作,将$TLEVEL事务级别计数器重置为0,并释放所有锁。
这会将数据库恢复到事务开始之前的状态。
ROLLBACK和ROLLBACK WORK是等价的语句;
这两个版本都支持兼容性。ROLLBACK TO SAVEPOINT pointname将回滚自指定保存点以来已完成的所有工作,并按未完成的保存点的数量递减$TLEVEL事务级别计数器。
当所有保存点都被回滚或提交,并且事务级别计数器重置为零时,事务就完成了。
如果指定的保存点不存在,或者已经回滚,ROLLBACK将发出SQLCODE -375错误并回滚整个当前事务。回滚到SAVEPOINT必须指定一个点名。
如果不这样做,将导致SQLCODE -301错误。
如果事务操作未能成功完成,则会发出SQLCODE -400错误。
ROLLBACK操作不影响以下项目:
从用户或角色中删除特权。
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]
删除一个或多个缓存查询。
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命令删除指定范围内定义的缓存查询:
下面的示例按照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)
指定结果集中行排序的SELECT子句。
ORDER BY ordering-item [ASC | DESC]{,ordering-item [ASC | DESC] ...}
ordering-item - 决定排序顺序的文字。
列名、列别名或列号。
ORDER BY子句可以包含单个排序项或以逗号分隔的排序项列表,以指定排序层次结构。ASC DESC - 可选-按升序(ASC)或降序(DESC)排序。
默认为升序。ORDER BY子句根据指定列的数据值或以逗号分隔的列序列对查询结果集中的记录进行排序。
该语句对单个结果集进行操作,这些结果集要么来自SELECT语句,要么来自多个SELECT语句的UNION。
ORDER BY按逻辑(内部存储)数据值对记录进行排序,而不考虑当前的选择模式设置。
ORDER BY子句是SELECT语句中的最后一个子句。
它出现在FROM、WHERE、GROUP BY和HAVING子句之后。
以错误的顺序指定SELECT子句将产生SQLCODE -25错误。
如果SELECT语句没有指定ORDER BY子句,则返回的记录顺序是不可预测的。
打开游标。
OPEN cursor-name
cursor-name - 游标的名称,已经声明过了。
游标名称是在DECLARE语句中指定的。
游标名称区分大小写。OPEN语句根据游标的DECLARE语句中指定的参数打开游标。
一旦打开,就可以获取游标。
打开的游标必须关闭。
SQLCODE -52错误。SQLCODE -101错误。SQLCODE -102错误。成功的OPEN设置SQLCODE = 0,即使结果集是空的。
作为SQL语句,这只在嵌入式SQL中支持。
通过ODBC使用ODBC API支持等价的操作。
下面的嵌入式SQL示例显示了一个正在打开和关闭的游标(名为EmpCursor):
锁表
LOCK [TABLE] tablename IN EXCLUSIVE MODE [WAIT seconds]
LOCK [TABLE] tablename IN SHARE MODE [WAIT seconds]
tablename - 要锁定的表的名称。
Tablename必须是已经存在的表。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。
模式搜索路径被忽略。IN EXCLUSIVE MODE / IN SHARE MODE - IN EXCLUSIVE MODE关键字短语创建一个常规的IRIS锁。
IN SHARE MODE关键字短语创建一个共享的IRIS锁。WAIT seconds - 可选-一个整数,指定在超时前尝试获取锁的秒数。
如果省略,则应用系统默认超时时间。LOCK和LOCK TABLE是同义词。
LOCK命令显式锁定SQL表。
此表必须是已存在的表,对其具有必要的特权。
如果tablename是一个不存在的表,LOCK会失败并出现编译错误。
如果tablename是临时表,则命令执行成功,但不执行任何操作。
如果tablename是视图,则命令失败,并出现SQLCODE -400错误。
IRIS支持单向外部联接:左外部联接和右外部联接。
使用标准的“inner”联接时,当一个表的行链接到第二个表的行时,第一个表中找不到第二个表中对应行的行将从输出表中排除。
使用单向外联接时,即使第二个表中没有匹配项,第一个表中的所有行也会包括在输出表中。使用单向外连接,第一个表会从第二个表中取出相关信息,但不会因为第二个表中缺少匹配项而牺牲自己的行。
例如,如果查询首先列出Table1并创建一个左外部联接,那么它应该能够看到Table1中的所有行,即使它们在Table2中没有对应的记录。
在指定单向外联接时,在FROM子句中命名表的顺序非常重要。对于左外部联接,指定的第一个表是联接的源表。对于右外部联接,指定的第二个表是联接的源表。因此,%INORDER或%STARTTABLE优化关键字不能与RIGHT OUTER JOIN一起使用。以下语法相互矛盾,导致SQLCODE-34错误:FROM%INORDER TABLE1 RIGHT OUTER JOIN TABLE2 ON....。
IRIS支持两种表示外连接的格式:
ANSI标准语法:LEFT OUTER JOIN和RIGHT OUTER JOIN。SQL标准语法将外联接放在SELECT语句的FROM子句中,而不是WHERE子句中,如下例所示:基于两个表中的数据创建表的SELECT子句。
table1 [[AS] t-alias1] CROSS JOIN table2 [[AS] t-alias2] |
table1 [[AS] t-alias1] , table2 [[AS] t-alias2]
table1 [[AS] t-alias1]
NATURAL [INNER] JOIN |
NATURAL LEFT [OUTER] JOIN |
NATURAL RIGHT [OUTER] JOIN |
table2 [[AS] t-alias2]
table1 [[AS] t-alias1]
[INNER] JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
FULL [OUTER] JOIN
table2 [[AS] t-alias2]
ON condition-expression
table1 [[AS] t-alias1]
[INNER] JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
table2 [[AS] t-alias2]
USING (identifier-commalist)
显示事务状态。
%INTRANSACTION
%INTRANS
无
%INTRANSACTION语句设置SQLCODE以指示事务状态:
SQLCODE=0。SQLCODE=100。事务正在进行时,%INTRANSACTION返回SQLCODE=0。此事务可以是由START TRANSACTION或SAVEPOINT发起的SQL事务。它也可以是由TSTART发起的ObjectScript事务。
事务嵌套对%INTRANSACTION没有影响。SET TRANSACTION对%INTRANSACTION没有影响。
还可以使用$TLEVEL确定事务状态。%INTRANSACTION仅指示事务是否正在进行。$TLEVEL指示事务是否正在进行以及当前的事务级别数。
以下嵌入式SQL示例显示%INTRANSACTION如何设置SQLCODE: