文章 姚 鑫 · 九月 18, 2021 4m read

第十九章 SQL命令 CREATE TABLE(六)

WITH子句,%CLASSPARAMETER关键字,STORAGETYPE关键字

可选的WITH子句可以在表格元素逗号结尾的圆括号之后和Shard Key定义(如果存在的话)之后指定。 WITH子句可以包含一个用逗号分隔的列表:

  • 一个或多个%CLASSPARAMETER 子句。
  • STORAGETYPE子句

%CLASSPARAMETER子句

WITH关键字之后,可以指定多个%CLASSPARAMETER关键字子句,每个子句定义一个类参数。 多个%CLASSPARAMETER子句子句之间用逗号分隔。 为了向后兼容,支持将%CLASSPARAMETER关键字子句指定为table-element-commalist中的元素。 在两个位置中指定相同的%CLASSPARAMETER关键字子句将产生SQLCODE -327错误。

%CLASSPARAMETER关键字后面跟着类参数名称、一个可选的等号和要分配给该类参数的文字值(字符串或数字)。 类参数总是定义为常数值。

因为用户可以用任何名称或值定义额外的类参数,所以只执行语法验证; 既不验证类参数是否存在,也不验证类参数的有效值。

0
0 117
文章 姚 鑫 · 九月 17, 2021 9m read

第十八章 SQL命令 CREATE TABLE(五)

定义外键

外键是引用另一个表的字段;存储在外键字段中的值是唯一标识另一个表中的记录的值。此引用的最简单形式如下例所示,其中外键显式引用Customers表中的主键字段CustID

CREATE TABLE Orders (
   OrderID INT UNIQUE NOT NULL,
   OrderItem VARCHAR,
   OrderQuantity INT,
   CustomerNum INT,
   CONSTRAINT OrdersPK PRIMARY KEY (OrderID),
   CONSTRAINT CustomersFK FOREIGN KEY (CustomerNum) REFERENCES Customers (CustID)
   )

最常见的情况是,外键引用另一个表的主键字段。但是,外键可以引用RowID(ID)或标识列。在任何情况下,外键引用都必须存在于被引用的表中,并且必须定义为唯一的;被引用的字段不能包含重复值或NULL

在外键定义中,可以指定:

  • 字段名:FOREIGN KEY (CustomerNum) REFERENCES Customers (CustID)
0
0 166
文章 姚 鑫 · 九月 15, 2021 10m read

第十七章 SQL命令 CREATE TABLE(四)

唯一字段约束

唯一字段约束对多个字段的组合值施加唯一值约束。它具有以下语法:

CONSTRAINT uname UNIQUE (f1,f2)

此约束指定字段f1f2的值组合必须始终是唯一的,即使这两个字段本身的值可能不是唯一的。可以为此约束指定一个、两个或多个字段。

此约束中指定的所有字段都必须在字段定义中定义。如果在此约束中指定的字段没有出现在字段定义中,则会生成SQLCODE-86错误。指定的字段应定义为非空。任何指定的字段都不应定义为唯一的,因为这会使指定此约束变得毫无意义。

字段可以按任何顺序指定。字段顺序指定相应索引定义的字段顺序。允许重复的字段名称。虽然可以在唯一字段约束中指定单个字段名称,但这与为该字段指定唯一数据约束在功能上是相同的。单字段约束确实提供了约束名称以供将来使用。

可以在表定义中指定多个唯一字段约束语句。约束语句可以在字段定义中的任何位置指定;按照惯例,它们通常放在已定义字段列表的末尾。

约束名称

Constraint关键字和唯一字段约束名称是可选的。以下各项在功能上等效:

CONSTRAINT myuniquefields UNIQUE (name,dateofbirth)
UNIQUE (name,dateofbirth)

约束名唯一地标识约束,并且还用于派生相应的索引名。

0
0 300
文章 姚 鑫 · 九月 15, 2021 10m read

第十六章 SQL命令 CREATE TABLE(三)

字段数据约束

数据约束控制字段允许使用的值、字段的默认值以及数据值使用的排序规则类型。所有这些数据约束都是可选的。可以按任何顺序指定多个数据约束,并以空格分隔。

NULL和NOT NULL

NOT NULL数据约束关键字指定该字段不接受空值;换句话说,每条记录都必须为该字段指定一个值。NULL和空字符串('') IRIS中是不同的值。可以在接受字符串的字段中输入空字符串,即使该字段定义了NOT NULL限制也是如此。不能在数值字段中输入空字符串。

NULL数据约束关键字显式指定此字段可以接受空值;这是字段的默认定义。

UNIQUE

唯一数据约束指定此字段仅接受唯一值。因此,没有两条记录可以包含该字段的相同值。SQL空字符串('')被视为数据值,因此在应用了UNIQUE数据约束的情况下,任何两条记录都不能包含此字段的空字符串值。NULL不被视为数据值,因此唯一数据约束不适用于多个NULL。要限制字段使用NULL,请使用NOT NULL关键字约束。

  • 唯一数据约束要求指定字段的所有值都是唯一值。
  • UNIQUE fields constraint(使用CONSTRAINT关键字)要求一组指定字段的所有值在串联在一起时产生唯一值。不需要将各个字段限制为唯一值。

定义为分片表的表对UNIQUE数据约束的使用有额外的限制。

0
0 345
文章 姚 鑫 · 九月 13, 2021 9m read

第十五章 SQL命令 CREATE TABLE(二)

全局临时表

指定GLOBAL TEMPORARY关键字将表定义为全局临时表。表定义是全局的(对所有进程都可用);表数据是临时的(在进程期间持续存在)。相应的类定义包含一个附加的类参数SQLTABLETYPE=“GLOBAL TEMPORARY”。与标准的 IRIS表一样,ClassType=Persistent,并且类包含Final关键字,表示它不能有子类。

无论哪个进程创建临时表,临时表的所有者都会自动设置为_PUBLIC。这意味着所有用户都可以访问缓存的临时表定义。例如,如果存储过程创建了一个临时表,则允许调用该存储过程的任何用户都可以访问该表定义。这仅适用于临时表定义;临时表数据特定于调用,因此只能由当前用户进程访问。

全局临时表的表定义与基表相同。全局临时表必须具有唯一的名称;尝试为其提供与现有基表相同的名称会导致SQLCODE-201错误。该表将一直存在,直到显式删除(使用DROP TABLE)。可以使用ALTER TABLE更改表定义。

下面的嵌入式SQL示例创建一个全局临时表:

ClassMethod CreateTable3()
{
	d $SYSTEM.Security.
0
0 311
文章 姚 鑫 · 九月 11, 2021 3m read

第十三章 SQL命令 CREATE ROLE

创建角色

大纲

CREATE ROLE role-name

参数

  • role-name - 要创建的角色的名称,它是一个标识符。角色名称不区分大小写。

描述

CREATE ROLE命令可创建角色。角色是可以分配给多个用户的一组命名权限。一个角色可以分配给多个用户,一个用户可以分配多个角色。角色在系统范围内可用,它不限于特定的命名空间。

角色名可以是最多64个字符的任何有效标识符。角色名称必须遵循标识符命名约定。角色名称可以包含Unicode字符。角色名称不区分大小写。如果选中了支持分隔标识符配置选项(默认设置),则角色名可以是用引号括起来的分隔标识符。如果是分隔标识符,则角色名可以是SQL保留字。它可以包含句点(.)、插入符号(^)和两个字符的箭头序列(->)。它不能包含逗号()或冒号()字符。它可以以除星号(*)以外的任何有效字符开头。

最初创建角色时,角色只是一个名称;它没有权限。要向角色添加权限,请使用GRANT命令。还可以使用GRANT命令为角色分配一个或多个角色。这允许创建角色层次结构。

如果调用CREATE ROLE来创建已经存在的角色,SQL会发出SQLCODE-118错误。可以通过调用$SYSTEM.SQL.Security.RoleExists()方法确定角色是否已存在:

  WRITE $SYSTEM.SQL.Security.
0
0 147
文章 姚 鑫 · 九月 10, 2021 10m read

第十二章 SQL命令 CREATE QUERY

创建Query

大纲

CREATE QUERY queryname(parameter_list) [characteristics] 
   [ LANGUAGE SQL ]
   BEGIN
code_body ;
   END

CREATE QUERY queryname(parameter_list) [characteristics] 
    LANGUAGE OBJECTSCRIPT
   { code_body }

参数

  • queryname - 要在存储过程类中创建的查询的名称。queryname必须是有效的标识符。过程名可以是限定的(schema.procname),也可以是非限定的(procname)。非限定过程名接受默认模式名。即使没有指定参数,queryname也必须后跟括号。
  • parameter_list - 可选-传递给查询的参数列表。参数列表用圆括号括起来,列表中的参数用逗号分隔。即使没有指定参数,括号也是必须的。
  • characteristics - 可选-指定查询特征的一个或多个关键字。允许的关键字有结果、容器IDFORFINALPROCEDURESELECTMODE。多个特征由空白(空格或换行符)分隔。特性可以以任何顺序指定。
0
0 180
文章 姚 鑫 · 九月 9, 2021 7m read

第十一章 SQL命令 CREATE PROCEDURE(二)

characteristics

用于创建方法的特征与用于创建查询的特征不同。

如果指定的特征无效,系统将生成SQLCODE -47错误。 指定重复的特征将导致SQLCODE -44错误。

可用的方法特征关键字如下:

方法关键字 含义
FOR className 指定要在其中创建方法的类的名称。如果这个类不存在,它将被创建。还可以通过限定方法名来指定类名。FOR子句中指定的类名通过限定方法名重写指定的类名。如果使用FOR my.class语法指定类名, IRIS将用Sqlname=procname定义类方法。因此,该方法应该作为my.procname()调用(而不是my.class_procname())。
FINAL 指定子类不能重写该方法。默认情况下,方法不是finalFINAL关键字由子类继承。
PRIVATE 指定该方法只能由它自己的类或子类的其他方法调用。默认情况下,方法是公共的,可以不受限制地调用。这个限制由子类继承。
RESULT SETSDYNAMIC RESULT SETS [n] 指定创建的方法将包含ReturnResultsets关键字。这一特征短语的所有形式都是同义词。
RETURNS datatype 指定调用该方法返回的值的数据类型。
0
0 220
文章 姚 鑫 · 九月 7, 2021 4m read

第九章 SQL命令 CREATE METHOD(二)

characteristics

可用的关键字如下:

  • FOR className - 指定要在其中创建方法的类的名称。 如果这个类不存在,它将被创建。 还可以通过限定方法名来指定类名。 FOR子句中指定的类名通过限定方法名重写指定的类名。
  • FINAL - 指定子类不能重写该方法。 默认情况下,方法不是finalFINAL关键字由子类继承。
  • PRIVATE - 指定该方法只能由它自己的类或子类的其他方法调用。 默认情况下,方法是公共的,可以不受限制地调用。 这个限制由子类继承。
  • PROCEDURE - 指定该方法是一个SQL存储过程。 存储过程由子类继承。 (这个关键字可以缩写为PROC。)
  • RESULT SETS ,DYNAMIC RESULT SETS [n] - 指定创建的方法将包含ReturnResultsets关键字。 这一特征短语的所有形式都是同义词。
  • RETURNS datatype - 指定调用该方法返回的值的数据类型。 如果省略RETURNS,则该方法不能返回值。 这个规范由子类继承,并且可以由子类修改。 该数据类型可以指定类型参数,如MINVALMAXVALSCALE。 例如RETURNS DECIMAL(19,4)
0
0 118
文章 姚 鑫 · 九月 6, 2021 5m read

第八章 SQL命令 CREATE METHOD(一)

在类中创建方法。

大纲

CREATE [STATIC] METHOD name (parameter_list) 
   [ characteristics ]
   [ LANGUAGE SQL ]
   BEGIN
code_body ;
   END

CREATE [STATIC] METHOD name (parameter_list) 
    [ characteristics ]
    LANGUAGE OBJECTSCRIPT
   { code_body }

参数

  • name - 要在存储过程类中创建的方法的名称。 名称必须是有效的标识符。 过程名可以是限定的(schema.procname),也可以是非限定的(procname)。 非限定过程名接受默认模式名。 名称后面必须跟括号,即使没有指定参数。
  • parameter_list - 可选——传递给方法的参数列表。 参数列表用圆括号括起来,列表中的参数用逗号分隔。 即使没有指定参数,括号也是必须的。
  • characteristics - 可选—指定方法特征的一个或多个关键字。 允许的关键字是RETURNS, FOR, FINAL, PRIVATE, PROCEDURE, SELECTMODE
0
0 131
文章 姚 鑫 · 九月 5, 2021 6m read

第七章 SQL命令 CREATE INDEX(二)

UNIQUE关键字

使用UNIQUE关键字,可以指定索引中的每条记录都有一个唯一的值。 更具体地说,这确保了索引(以及包含索引的表)中的两条记录不能具有相同的排序值。 默认情况下,大多数索引使用大写字符串排序(使搜索不区分大小写)。 在本例中,值“Smith”“SMITH”被认为是相等的,而不是唯一的。 CREATE INDEX不能指定非默认索引字符串排序规则。 通过在类定义中定义索引,可以为各个索引指定不同的字符串排序规则。

可以更改名称空间的默认排序规则,使字段/属性在默认情况下区分大小写。 更改此选项需要重新编译命名空间中的所有类并重新构建所有索引。 转到Management Portal,选择Classes选项,为存储的查询选择名称空间,并使用Compile选项重新编译相应的类。 然后重建所有指数。 它们将区分大小写。

注意:当表的数据被其他用户访问时,不要重建索引。 这样做可能会导致不准确的查询结果。

BITMAP 关键字

使用BITMAP关键字,你可以指定这个索引将是位图索引。 位图索引由一个或多个位字符串组成,其中位位置表示行id,每个位值表示该行字段(或合并字段名字段的值)的特定值的存在(1)或不存在(0)。

0
0 167
文章 姚 鑫 · 九月 4, 2021 9m read

第六章 SQL命令 CREATE INDEX(一)

为表创建索引。

大纲

CREATE [UNIQUE | BITMAP | BITMAPEXTENT | BITSLICE ] INDEX index-name
        ON [TABLE] table-name
       (field-name, ...)
       [AS index-class-name [ (parameter-name = parameter_value, ... ) ] ]
       [WITH DATA  (datafield-name, ...)]

参数

  • UNIQUE - 可选的——一个约束,确保表中不会有两行索引中所有字段的值相同。不能为位图或位片索引指定此关键字。UNIQUE关键字后面可以跟(或被)CLUSTEREDNONCLUSTERED关键字替换。 这些关键字是no-ops; 它们是为了与其他供应商兼容而提供的。
  • BITMAP - 可选—表示创建位图索引。 位图索引允许对具有少量不同值的字段进行快速查询。
  • BITMAPEXTENT - 可选-表示应该创建位映射范围索引。 一个表最多只能创建一个位映射范围索引。 BITMAPEXTENT中没有指定字段名。
  • BITSLICE - 可选—创建位片索引。
0
0 119
文章 姚 鑫 · 九月 3, 2021 3m read

第五章 SQL命令 BUILD INDEX

用数据填充一个或多个索引。

大纲

BUILD INDEX [%NOLOCK] [%NOJOURN] FOR TABLE table-name [INDEX index-name [,index-name]]

BUILD INDEX [%NOLOCK] [%NOJOURN] FOR SCHEMA schema-name

BUILD INDEX [%NOLOCK] [%NOJOURN] FOR ALL

参数

  • FOR TABLE table-name - 已存在表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • INDEX index-name - 可选—索引名称或以逗号分隔的索引名称列表。 如果指定,则只构建这些索引。 如果未指定,将构建为表定义的所有索引。
  • FOR SCHEMA schema-name - 现有模式的名称。 此命令为指定模式中的所有表构建所有索引。

描述

BUILD INDEX提供了三种语法形式来构建/重新构建所有已定义的索引:

  • Table: BUILD INDEX FOR TABLE table-name. 可选的INDEX子句允许仅构建/重新构建指定的索引。
0
0 138
文章 姚 鑫 · 九月 2, 2021 4m read

第四章 SQL命令 ALTER VIEW

修改视图。

大纲

ALTER VIEW view-name [(column-commalist)] AS query [WITH READ ONLY]

ALTER VIEW view-name [(column-commalist)] AS query [WITH [level] CHECK OPTION]

参数

参数 描述
view-name 被修改的视图,它具有与表名相同的命名规则。视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。非限定视图名接受默认模式名。
column-commalist 可选-组成视图的列名。如果这里没有指定,可以在查询中指定列名,如下所示。
query 作为视图基础的结果集(来自查询)。
WITH READ ONLY 可选-指定不能通过此视图对视图所基于的表执行插入、更新或删除操作。默认情况下,允许通过视图进行这些操作,约束如下所示。
WITH level CHECK OPTION 可选-指定如何通过此视图对视图所基于的表执行插入、更新或删除操作。级别可以是关键字LOCALCASCADED。如果没有指定级别,则WITH CHECK OPTION默认为级联。

描述

ALTER VIEW命令用于修改视图。

0
0 108
文章 姚 鑫 · 九月 1, 2021 3m read

第三章 SQL命令 ALTER USER

修改用户密码。

大纲

ALTER USER user-name IDENTIFY BY password

ALTER USER user-name IDENTIFIED BY password

参数

参数 描述
user-name 待修改密码的已有用户名。用户名不区分大小写。
password 用户的新密码。密码必须至少包含3个字符,并且不能超过32个字符。密码区分大小写。密码可以包含Unicode字符。

描述

ALTER USER命令允许更改用户的密码。可以随时更改自己的密码。要更改其他用户的密码,必须拥有%Admin_Secure:USE系统权限。

IDENTIFY BYIDENTIFIED BY关键字是同义词。

user-name必须是已存在的用户。 指定一个不存在的用户将生成一个带有%msgSQLCODE -400错误,如下所示:ERROR #838: User badname does not exist。可以通过调用$SYSTEM.SQL.Security.UserExists()方法来确定用户是否存在。

作为分隔标识符指定的用户名可以是SQL保留字,可以包含逗号()、句号(.)、插入符号(^)和两个字符的箭头序列(->)。 它可以以除星号(*)以外的任何有效字符开头。

密码可以是字符串字面值、数字或标识符。

0
0 100
文章 姚 鑫 · 八月 31, 2021 10m read

第二章 SQL命令 ALTER TABLE(二)

删除列限制

DROP COLUMN可以删除指定为逗号分隔列表的多个列定义。每个列出的列名后面必须紧跟其RESTORYCASCADE(如果未指定,则默认为RESTRICE)和%DELDATA%NODELDATE(如果未指定,则默认为%NODELDATA)选项。

默认情况下,删除列定义不会从数据映射中删除存储在该列中的任何数据。 要同时删除列定义和数据,请指定%DELDATA选项。

删除列定义并不删除相应的列级特权。 例如,授予用户在该列上插入、更新或删除数据的权限。 这将产生以下后果:

  • 如果删除了一个列,然后添加了另一个同名的列,那么用户和角色将在新列上拥有与旧列相同的特权。
  • 删除列后,不可能撤销该列的对象特权。

由于这些原因,通常建议在删除列定义之前使用REVOKE命令从列中撤销列级特权。

RESTRICT关键字(或无关键字):如果列出现在索引中,或者定义在外键约束或其他唯一约束中,则不能删除该列。 为该列尝试DROP COLUMN失败,并出现SQLCODE -322错误。 默认为RESTRICT

CASCADE关键字:如果该列出现在索引中,该索引将被删除。 可能有多个索引。 如果列出现在外键中,则将删除外键。 可能有多个外键。

如果列在COMPUTECODECOMPUTEONCHANGE子句中使用,则不能删除该列。

0
0 119
文章 姚 鑫 · 八月 30, 2021 12m read

第0讲 前言

自我介绍

大家好,我简单的自我介绍一下,我是姚鑫,

为什么开这次的课程

首先Caché,M这门技术相对比较冷门,资料方面都是英文,没有系统的相关资料,记得刚入职时学习的东西都是很基础的,稍微有一些复杂的结构变化,就不知道如何下手。之后,群里的小伙伴总有人问我,希望我出一个系统的Caché视频,这件事我也酝酿了很久,目的就是帮助到更多的同学,让每个小伙伴在日后的工作学习中能更加的得心应手。遇到困难或问题时,大家可以随时在群里咨询,群里的氛围很和谐,有很多热心的大佬,不会说有那种自己觉得简单的问题,不好意思问,没人回答的情况。只要你觉得是个问题就可以发出来。

因为这段时间比较忙,准备的比较仓促,可能有一些内容会有遗漏,大家有啥想法可以群里留言,会后可以答疑,大家可以提出来,一起探讨一下,后续的会准备的更加充分一些。

课程特点

  • 本次课程什么时候讲完什么时候结束。
  • 全方位无死角覆盖所有知识点,讲解详细,上手容易。
  • 内容实际,实用性强,每个知识点都可以找到对应的参考实例。

受众

  • 0基础刚接触Caché的同学。
  • 有一定接触,但是对一些细节和概念不清楚的同学。
  • 想掌握更多编程细节的同学。

效果

  • 可以掌握Caché编程所有的知识点,避免对一些冷门只是无从下手。
  • 对于一门技术而言,只有对其了解足够深入,才能用最浅,通俗的话语将其描述出来。做到深入浅出就是本次课程的一个主要目标。
0
1 487
文章 姚 鑫 · 八月 29, 2021 6m read

第一章 SQL中使用的符号

SQL中用作运算符等的字符表

符号表

每个符号的名称后跟其ASCII十进制代码值。

符号 名称和用法
[space] or [tab] 空白(制表符(9)或空格(32)):关键字、标识符和变量之间的一个或多个空白字符。
! 感叹号(33):条件表达式中谓词之间的或逻辑运算符。用于WHERE子句、HAVING子句和其他地方。在SQL Shell命令用于发出ObjectScript命令行。
!= 感叹号/等号:不等于比较条件。
" 引号(34):包含一个分隔的标识符名称。在动态SQL中,用于将类方法参数的文字值括起来,例如将SQL代码作为%Prepare()方法的字符串参数,或者将输入参数作为%Execute()方法的字符串参数。在%PATTERN中,用于将文字值包含在模式字符串中。例如,'3L1"L".L'(意思是3个小写字母,后面跟着大写字母“L”,后面跟着任意数量的小写字母)。在XMLELEMENT中,用于括起标记名字符串。
"" 两个引号:本身是无效的分隔标识符。在分隔标识符内,文字引号字符的转义序列。例如,"a""good""id"
# 井号(35):有效的标识符名称字符(不是第一个字符)。前后带有空格的模算术运算符。对于嵌入式SQL,是ObjectScript宏预处理器指令前缀。例如,#include
0
0 1528
文章 姚 鑫 · 八月 27, 2021 2m read

第153章 Storage关键字 - SqlRowIdProperty

指定SQL RowId属性。

大纲

<SqlRowIdProperty>prop</SqlRowIdProperty>

该元素的值是一个SQL标识符。

描述

此元素仅由从早期InterSystems产品迁移的类使用。

默认值

元素的默认值为空字符串。

第154章 Storage关键字 - SqlTableNumber

指定内部SQL表号。

大纲

<SqlTableNumber>123</SqlTableNumber>

该元素的值是一个表号。

描述

此元素仅由从早期InterSystems产品迁移的类使用。

默认值

元素的默认值为空字符串。

第155章 Storage关键字 - State

指定用于串行对象的数据定义。

大纲

<State>state</State>

此元素的值是此存储定义中的数据定义的名称。

描述

对于串行(嵌入式)类,此关键字指示使用哪个数据定义来定义对象的序列化状态(序列化时对象属性的排列方式)。这也是默认数据定义,默认结构生成器将向其添加未存储的属性。

默认值

元素的默认值为空字符串。

第156章 Storage关键字 - StreamLocation

指定流属性的默认存储位置。

大纲

<StreamLocation>^Sample.PersonS</StreamLocation>

此元素的值是带有可选前导下标的全局名称。

0
0 132
文章 姚 鑫 · 八月 26, 2021 2m read

第149章 Storage关键字 - IdFunction

指定使用默认存储为持久类分配新ID值的系统函数。

大纲

<IdFunction>increment</IdFunction>

这个元素的值可以是increment(使用$increment函数)或sequence(使用$sequence函数)。

描述

如果持久化类不使用IdKey来确定对象ID值,则该元素允许指定用于分配ID值的函数($increment函数或$sequence函数)。

如果类使用$increment函数,则通过对元素中定义的全局位置中存储的值进行递增来创建新的id。

如果类使用$sequence函数,它可能会保留id块,以便在快速数据摄入的情况下获得更快的速度。 如果没有使用所有保留的ID,则可能导致ID号之间的空白。 当随后的数据被吸收时,这些空白可能会也可能不会被填补。 一个副作用是,具有较高ID的类的实例不一定比具有较低ID的类的实例更新。 此外,在元素中定义的全局位置上的值与当前分配的任何id都不直接相关。

默认值

元素的默认值是使用类定义创建的类的递增值。

元素的默认值是使用DDL CREATE TABLE语句创建的类的序列。

第150章 Storage关键字 - IdLocation

指定ID计数器的位置。

大纲

<IdLocation>^Sample.
0
0 151
文章 姚 鑫 · 八月 25, 2021 2m read

第145章 XData关键字 - XMLNamespace

指定XData块所属的XML名称空间。

用法

要指定XData块所属的XML名称空间,请使用如下语法:

XData name [ XMLNamespace = "namespaceURL" ] { }

其中namespaceURLXML名称空间的URI。 注意,这一项是用双引号括起来的。

详情

该关键字指定XData块所属的XML名称空间。

默认

如果省略这个关键字,则该XData块的内容不属于任何名称空间。

示例

XData MyXData [ XMLNamespace = "http://www.mynamespace.org" ]
{
}

第146章 Storage关键字 - DataLocation

指定该类的数据存储位置。

大纲

<DataLocation>^Sample.PersonD</DataLocation>

element的值是一个全局变量名称,具有可选的前导下标。

描述

一个表达式,它是存储该类数据的位置。 通常这将是一个全局变量引用,如^User.PersonD。 全局变量引用还可以包含一个或多个前导下标。 例如, ^User.Data("Person")

在从属类(父-子关系中的子类)中使用{%%PARENT}代替全局或局部变量名也是有效的。 例如,{%%PARENT}(ChildData)

0
0 144
文章 姚 鑫 · 八月 24, 2021 2m read

第141章 触发器关键字 - UpdateColumnList

指定一个或多个列,其修改将导致SQL触发触发器。 仅对TSQL可用。

用法

要指定其修改触发触发器的列,请使用以下语法:

Trigger name [ Event = sqlevent, UpdateColumnList = updatecolumnlist ]  {    //implementation }

其中updatecolumnlist是一个列名或用逗号分隔的列名列表,用括号括起来。

详情

该关键字指定一个或多个列,其修改将触发触发器。 注意,此关键字仅对TSQL可用。

第142章 XData关键字 - Internal

指定这个XData块是否是内部的(不在类文档中显示)。 注意,类文档目前根本没有显示XData

用法

要指定这个XData块是内部的,请使用以下语法:

XData name [ Internal ]  { }

否则,忽略该关键字或将Not放在该关键字之前。

详情

类文档中不显示内部类成员。 如果希望用户看到一个类而不是它的所有成员,则此关键字非常有用。

注意,类文档目前根本没有显示XData块。

第143章 XData关键字 - MimeType

指定XData块的MIME类型。

0
0 132
文章 姚 鑫 · 八月 23, 2021 2m read

第137章 触发器关键字 - OldTable

指定存储受事件影响的行或语句的旧值的转换表的名称。

用法

要指定存储旧值的转换表的名称,请使用以下语法:

Trigger name [ Event = sqlevent, OldTable = oldtable, NewTable = newtable ] {    //implementation }

其中oldtable是此命名空间中的SQL表的名称。

详情

每个触发器都可以通过转换表(由旧表和新表关键字指定)访问受事件影响的行或语句的旧值和新值。

默认

默认值为空字符串。

第138章 触发器关键字 - Order

在同一个EVENTTIME有多个触发器的情况下,指定触发器应该触发的顺序。

用法

要指定此触发器的触发顺序,相对于具有相同EVENTTIME的其他触发器,请使用以下语法:

Trigger name [ Event = sqlevent, Order = n, Time = time ] {    //implementation }

其中n为整数。

详情

在同一个EVENTTIME有多个触发器的情况下,该关键字指定触发器应该触发的顺序。

默认

默认值为0

第139章 触发器关键字 - SqlName

指定用于此触发器的SQL名称。

0
0 114
文章 姚 鑫 · 八月 22, 2021 3m read

第133章 触发器关键字 - Foreach

控制触发器何时被触发。

用法

Trigger name [ Event = sqlevent, Foreach = foreach ]  {    //implementation }

其中foreach是下列值之一:

  • row — 该触发器由触发语句影响的每一行触发。 注意,TSQL不支持行级触发器,因此Language关键字的设置必须是objectscript
  • row/object — 此触发器由受触发语句或通过对象访问进行的更改影响的每一行触发。请注意,TSQL不支持行级触发器,因此Language关键字的设置必须为objectscript

这个选项定义了一个统一触发器,之所以这么叫,是因为它是由通过SQL或对象访问发生的数据更改触发的。 (相比之下,与其他触发器相比,如果在通过对象访问发生更改时使用相同的逻辑,则需要实现回调,如%OnDelete()。)

  • statement — 整个语句只触发一次触发器。 ObjectScriptTSQL都支持语句级触发器; 即Language关键字的设置分别为objectscripttsql

详情

控制何时触发触发器。

默认

如果省略此关键字,则触发器为行级触发器。

例外

TSQL不支持行级触发器。

第134章 触发器关键字 - Internal

指定此触发器定义是否为内部触发器(不显示在类文档中)。

0
0 161
文章 姚 鑫 · 八月 21, 2021 3m read

第129章 查询关键字 - WebMethod

指定这个类查询是否为web方法。 仅应用于定义为web服务web客户端的类。

用法

要指定这个查询是一个web方法,请使用以下语法:

Query name(formal_spec) As classname [ WebMethod ] {    //implementation }

否则,忽略该关键字或将Not放在该关键字之前。

详情

这个关键字指定这个类查询是否是一个web方法,是否可以通过SOAP协议调用。

默认

如果忽略此关键字,则无法以web方法调用查询。

生成的类

当你将这个关键字添加到类查询并编译类时,类编译器会生成两个额外的类:

  • Package.OriginalClass.QueryName
  • Package.OriginalClass.QueryName.DS

Package.OriginalClass是包含web方法的类,QueryName是类查询的名称。

例如,假设从类ROBJDemo.QueryWS开始。 ,然后向它添加一个名为MyQuery的类查询。 当你将WebMethod关键字添加到该类查询并编译它时,类编译器会生成以下额外的类:

  • ROBJDemo.QueryWS.MyQuery
  • ROBJDemo.QueryWS.MyQuery.DS

不要修改或直接使用这些生成的类;它们仅供内部使用。

0
0 148
文章 姚 鑫 · 八月 20, 2021 2m read

第125章 查询关键字 - SqlName

覆盖投影SQL存储过程的默认名称。 仅当此查询被投影为SQL存储过程时应用。

用法

要覆盖查询投射为SQL存储过程时使用的默认名称,请使用以下语法:

Query name(formal_spec) As classname [ SqlProc, SqlName = sqlname ] {    //implementation }

其中sqlnameSQL标识符。

详解

如果将此查询投影为一个SQL存储过程,则使用此名称作为存储过程的名称。

默认

如果忽略此关键字,查询名称将用作SQL过程名称。

第126章 查询关键字 - SqlProc

指定查询是否可以作为SQL存储过程调用。

用法

要指定查询可以作为SQL存储过程调用,请使用以下语法:

Query name(formal_spec) As classname [ SqlProc ] {    //implementation }

否则,忽略该关键字或将Not放在该关键字之前。

详情

该关键字指定是否可以作为SQL存储过程调用查询。

默认

如果忽略此关键字,则无法将查询作为SQL存储过程调用。

第127章 查询关键字 - SqlView

指定是否将此查询投影为SQL视图。

0
0 168