概述
文章目录
-
第十七章 Caché 命令大全 MERGE 命令 - 重点
- 大纲
- 参数
- 描述
- 参数
- pc
- destination and source
- 示例
- 注意
- 裸指示器
- 合并到自身
- 观察点
第十七章 Caché 命令大全 MERGE 命令
将全局节点或子树从源合并到目标。
重点
Merge
命令执行时间可能会比较长。- 注意合并的树状结构节点,规则。
- 查询临时globe
大纲
MERGE:pc mergeargument,...
M:pc mergeargument,...
其中Mergeargument为:
destination=source
参数
- pc 可选,后置表达式
- destination and source 局部变量、进程私有全局变量或要合并的全局变量。如果指定为类属性,则源变量必须是多维(下标)变量。
描述
MERGE destination=source
将源复制到目标,并将源的所有后代复制到目标的后代。它不修改源,也不终止目标中的任何节点。
MERGE
简化了将变量的子树(多个下标)复制到另一个变量的过程。这两个变量都可以是带下标的局部变量、进程私有全局变量或全局变量。子树是指定变量的后代的所有变量。Merge
为当前的子树复制技术提供了一个命令替代方案:一系列带有$ORDER
引用的SET
命令。
如果源和目标具有父子关系,则MERGE
会发出<command>
错误。
Merge
命令的执行时间可能比大多数其他CachéObjectScript命令都长。因此,它更容易被中断。中断的影响是特定于实现的。在Caché下,中断可能会导致源的不可预知子集被复制到目标子树。
参数
pc
可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行MERGE
命令。如果后置条件表达式为假(计算结果为零),则Caché不执行该命令。
destination and source
要合并的变量。这两个变量都可以是局部变量、进程私有全局变量或全局变量。如果未定义目标,则合并将其定义并将其设置为源。如果未定义源,MERGE
将成功完成,但不会更改目标。
可以指定多个逗号分隔的Destination=Source
。它们按从左到右的顺序进行计算。
Mergeargument可以间接引用Destination=Source
对。例如,MERGE @tMergeString
。
mergeargument可以是通过引用传递的数组,该数组指定可变数量的参数,例如myargs
.
^$GLOBAL SSVN
可以是源变量。这会将全局变量目录复制到目标变量。Merge
将每个全局名称添加为具有空值的目标下标。
下面的示例显示了这一点:
DHC-APP> MERGE gbls=^$GLOBAL("")
...
gbls("^zpeterc")=""
gbls("^zsb")=""
gbls("^zseq")=""
gbls("^zstock")=""
gbls("^ztTmp")=""
gbls("^ztrap1")=""
gbls("^zwb1")=""
gbls("^zwhtmp")=""
gbls("^zx")=""
gbls("^zx1")=""
gbls("^zx2")=""
gbls("^zxdd")=""
gbls("^zyb")=""
gbls("^zyb1")=""
gbls("^zyb2")=""
gbls("^zyl")=""
gbls("^zzTT")=""
gbls("^zzdt")=""
gbls("^zzp")=""
gbls("^zzy")=""
gbls("^zzz")=""
...
示例
下面的示例将子树从一个全局变量(^a
)复制到另一个全局变量(^b
)。在本例中,合并用于创建较小的全局变量^b
,它仅包含^a
中信息的^a(1,1)
子树。
/// d ##class(PHA.TEST.Command).TestMerge()
ClassMethod TestMerge()
{
SET ^a="cartoons"
SET ^a(1)="The Flintstones",^a(2)="The Simpsons"
SET ^a(1,1)="characters",^a(1,2)="place names"
SET ^a(1,1,1)="Flintstone family"
SET ^a(1,1,1,1)="Fred"
SET ^a(1,1,1,2)="Wilma"
SET ^a(1,1,2)="Rubble family"
SET ^a(1,1,2,1)="Barney"
SET ^a(1,1,2,2)="Betty"
MERGE ^b=^a(1,1)
WRITE ^b,!,^b(2),!,^b(2,1)," and ",^b(2,2)
}
DHC-APP>d ##class(PHA.TEST.Command).TestMerge()
characters
Rubble family
Barney and Betty
以下示例显示了目标全局变量与源全局变量的子树合并后的外观.
假设执行以下命令:
/// d ##class(PHA.TEST.Command).TestMerge1()
ClassMethod TestMerge1()
{
KILL ^X,^Y
SET ^X(2,2)="first"
SET ^X(2,2,4)="second"
SET ^Y(3,6,7)="third"
SET ^Y(3,6,8)="fourth"
SET ^Y(3,6,7,8,4)="fifth"
SET ^Y(3,6,7,8,9)="sixth"
WRITE ^X(2,2),!,^X(2,2,4),!
WRITE ^Y(3,6,7),!,^Y(3,6,8),!
WRITE ^Y(3,6,7,8,4),!,^Y(3,6,7,8,9)
}
下图显示了^X
和^Y
的结果逻辑结构。
^X
和^Y
的初始结构
考虑以下Merge
命令:
MERGE ^X(2,3)=^Y(3,6,7,8)
发出上一条语句时,Caché会将^Y
的一部分复制到^X(2,3)
中。现在,全局变量^X
的结构如下图所示。
Merge
命令的^X
和^Y
的结果
注意
裸指示器
当目标和源都是局部变量时,裸指示符不会更改。 如果source是全局变量,而Destination是局部变量,则裸指示符引用source。
当源和目标都是全局变量时,如果未定义源($data(Source)=0
),则裸指示符不会改变。在所有其他情况下(包括$DATA(SOURCE)=10
),裸露指示符采用的值与设置命令替换MERGE命令并且SOURCE具有值时的值相同。
合并到自身
当目标和源是同一变量时,不会发生合并。日记文件中没有记录任何内容。但是,根据上一节中介绍的规则,可以更改裸体指示器。
观察点
MERGE
命令支持观察点。如果某个观察点有效,则只要合并更改了受监视变量的值,Caché就会触发该观察点。要设置观察点,请使用ZBREAK
命令。
最后
以上就是俊逸帅哥为你收集整理的第十七章 Caché 命令大全 MERGE 命令 第十七章 Caché 命令大全 MERGE 命令 重点大纲描述参数示例注意的全部内容,希望文章能够帮你解决第十七章 Caché 命令大全 MERGE 命令 第十七章 Caché 命令大全 MERGE 命令 重点大纲描述参数示例注意所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复