第八十三章 SQL命令 UPDATE(二)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八十三章 SQL命令 UPDATE(二)相关的知识,希望对你有一定的参考价值。
参考技术A 数据以逻辑模式格式存储。例如,日期存储为整数天数,时间存储为从午夜开始的秒数, %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 的属性值。
可以按照如下方法更新流字段中的数据值:
或流的 OREF 的字符串版本,例如:
不能使用流字段的内容更新非流字段。
这将导致一个 SQLCODE -303 错误:“不支持在UPDATE赋值中隐式地将流值转换为非流字段”。
要用 Stream 数据更新字符串字段,必须首先使用 SUBSTRING 函数将 Stream 数据的前 n 个字符转换为字符串,如下面的示例所示:
用 COMPUTECODE 定义的字段可以作为 UPDATE 操作的一部分重新计算它的值,如下所示:
当没有实际更新发生时, COMPUTEONCHANGE 计算字段不会重新计算:当 update 操作的新字段值与之前的字段值相同时。
在大多数情况下,将计算字段定义为只读。
这防止更新操作直接更改一个值,该值是涉及其他字段值的计算结果。
在本例中,试图使用 UPDATE 覆盖计算字段的值将导致 SQLCODE -138 错误。
但是,可能希望修改一个计算字段值,以反映对一个(或多个)源字段值的更新。
可以通过使用更新触发器来实现这一点,该更新触发器在您更新了指定的源字段之后重新计算计算过的字段值。
例如,对 Salary 数据字段的更新可能触发重新计算 Bonus computed 字段的触发器。
这个更新触发器重新计算 Bonus 并成功完成,即使 Bonus 是一个只读字段。
可以使用 CREATE TABLE ON UPDATE 关键字短语来定义一个字段,当记录被更新时,该字段被设置为文字或系统变量(例如当前时间戳)。
当更新 %SerialObject 中的数据时,必须更新引用嵌入 %SerialObject 的表(持久化类);
不能直接更新 %SerialObject 。
从引用表中,可以:
此类型的更新可能不会执行 %SerialObject 属性值的验证。因此,强烈建议在使用%List结构更新 %SerialObject 属性值之后,使用 $SYSTEM.SQL.Schema.ValidateTable() 方法执行表数据验证。
此类型的更新执行 %SerialObject 属性值的验证。
UPDATE 命令可能没有 FROM 关键字。它可以简单地指定要更新的表(或视图),并使用 WHERE 子句选择要更新的行。
但是,还可以在 value-assignment -语句之后包括一个可选的 FROM 子句。此 FROM 子句指定用于确定要更新哪些记录的一个或多个表。 FROM 子句通常(但并非总是)与涉及多个表的 WHERE 子句一起使用。 FROM 子句可以很复杂,并且可以包括ANSI联接语法。 UPDATE FROM 子句允许 SELECT FROM 子句中支持的任何语法。此 UPDATE FROM 子句提供与 Transact-SQL 的功能兼容性。
以下示例显示如何使用此 FROM 子句。它更新 Employees 表中的那些记录,其中也可以在 Requirees 表中找到相同的 EmpId :
如果 UPDATE TABLE-REF 和 FROM 子句引用同一个表,则这些引用可能是引用同一个表,也可能是引用该表的两个实例的联接。这取决于如何使用表别名:
指定 %Keyword 参数将按如下方式限制处理:
注意:由于使用 %NOCHECK 可能导致无效数据,因此只有在从可靠的数据源执行批量插入或更新时才应使用此%关键字参数。
用户必须具有当前命名空间的相应 %NOCHECK 管理权限才能应用此限制。否则将导致 SQLCODE-99 错误,因为 %msg 用户 ‘name’ 没有 %NOCHECK 权限。
如果希望在指定 %NOCHECK 时阻止导致非唯一数据值的更新,请在更新之前执行 EXISTS 检查。
如果只希望禁用外键引用完整性检查,请使用 $SYSTEM.SQL.Util.SetOption(“FilerRefIntegrity”) 方法,而不是指定 %NOCHECK 。或者,可以使用 NOCHECK 关键字定义外键,这样就永远不会执行外键引用完整性检查。
%PROFILE 为主查询模块收集 SQLStats 。
%PROFILE_ALL 为主查询模块及其所有子查询模块收集 SQLStats 。
可以以任何顺序指定多个 %keyword 参数。
多个参数由空格分隔。
“全栈2019”Java第八十五章:实现接口中的嵌套接口
难度
初级
学习时间
10分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
文章原文链接
下一章
学习小组
加入同步学习小组,共同交流与进步。
方式一:关注头条号Gorhaf,私信“Java学习小组”。
方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!
以上是关于第八十三章 SQL命令 UPDATE(二)的主要内容,如果未能解决你的问题,请参考以下文章
孤荷凌寒自学python第八十三天初次接触ocr配置tesseract环境