第六十三章 Caché 函式大全 $SORTEND 函式

yaoxin521123發表於2020-10-23

文章目錄

第六十三章 Caché 函式大全 $SORTEND 函式

結束由$SORTBEGIN啟動的排序模式。

大綱

$SORTEND(set_global,dosort)

引數

  • set_global 可選-在相應的$SORTBEGIN中指定的全域性變數。如果省略,$SORTEND將結束當前程式的所有$SORTBEGIN操作。
  • dosort 可選-標誌引數。如果為1,則Caché執行由$SORTBEGIN啟動的排序操作,並將已排序的資料複製到set_global中。如果為0,則Caché終止排序操作,而不復制任何資料。預設值為1。

描述

$SORTEND指定由$SORTBEGIN對特定目標全域性物件發起的特殊排序模式的結尾。 $SORTEND set_global的值必須與相應的$SORTBEGIN set_global相匹配。

如果省略set_global,則$SORTEND會終止由當前程式的所有活動$SORTBEGIN函式啟動的所有當前排序模式。因此,$SORTEND()或$SORTEND(,1)結束並提交該過程的所有當前排序模式; $SORTEND(,0)中止該過程的所有當前排序模式。

  • 如果成功,$SORTEND將返回設定的全域性節點總數的正整數。指定set_global時,這是應用於指定set_global變數的集合數。省略set_global時,這是應用於所有當前$SORTBEGIN set_global變數的集合數。無論dosort標誌設定如何,都會返回此整數計數。
  • 如果失敗,則$SORTEND返回-1。例如,如果$SORTEND指定的set_global沒有相應的活動$SORTBEGIN
  • 如果沒有操作,則$SORTEND返回0。如果沒有對指定的set_global變數應用任何集,或者在發出未指定set_global$SORTEND時沒有活動的$SORTBEGIN,則會發生這種情況。

如果在$SORTBEGIN$SORTEND之間更改了set_global名稱空間的對映,則在呼叫$SORTEND時會發生<NAMESPACE>錯誤。但是,如果$SORTBEGIN使用隱式名稱空間指定set_global,則後續名稱空間對映更改對$SORTEND無效。具有隱式名稱空間的全域性引用和具有顯式名稱空間的全域性引用不應在同一排序操作中混合使用。

示例

以下示例將三組應用於全域性^myyestest$SORTEND返回3。由於dosort為1,因此應用了這些集合,如$DATA函式返回值所示:

/// d ##class(PHA.TEST.Function).SORTBEGIN()
ClassMethod SORTBEGIN()
{
	WRITE $SORTBEGIN(^myyestest),!
	SET ^myyestest(1)="apple"
	SET ^myyestest(2)="orange"
	SET ^myyestest(3)="banana"
	WRITE $SORTEND(^myyestest,1),!
	WRITE $DATA(^myyestest(1)),!
	WRITE $DATA(^myyestest(2)),!
	WRITE $DATA(^myyestest(3))
	KILL ^myyestest
}
DHC-APP>d ##class(PHA.TEST.Function).SORTBEGIN()
1
3
1
1
1

以下示例將三組應用於全域性^mynotest$SORTEND返回3。由於dosort為0,因此不應用這些集合,如$DATA函式返回值所示:

/// d ##class(PHA.TEST.Function).SORTBEGIN1()
ClassMethod SORTBEGIN1()
{
	WRITE $SORTBEGIN(^mynotest),!
	SET ^mynotest(1)="apple"
	SET ^mynotest(2)="orange"
	SET ^mynotest(3)="banana"
	WRITE $SORTEND(^mynotest,0),!
	WRITE $DATA(^mynotest(1)),!
	WRITE $DATA(^mynotest(2)),!
	WRITE $DATA(^mynotest(3))
	KILL ^mynotest
}
DHC-APP>d ##class(PHA.TEST.Function).SORTBEGIN1()
1
3
0
0
0

下面的兩個示例指定了兩個$SORTBEGIN運算,並且在其中將三組應用於全域性^mytesta,並將兩組應用於全域性^mytestb$SORTEND未指定set_global,因此結束所有當前的$SORTBEGIN操作並返回5。請注意,在兩個示例中,$SORTEND返回5,儘管第一個示例提交了這些集合,而第二個示例中止了這些集合。

/// d ##class(PHA.TEST.Function).SORTBEGIN2()
ClassMethod SORTBEGIN2()
{
	WRITE $SORTBEGIN(^mytesta),!
	SET ^mytesta(1)="apple"
	SET ^mytesta(2)="orange"
	SET ^mytesta(3)="banana"
	WRITE $SORTBEGIN(^mytestb),!
	SET ^mytestb(1)="corn"
	SET ^mytestb(2)="carrot"
	WRITE "$SORTEND returns: ",$SORTEND(,1),!
	WRITE "global sets committed?: ",$DATA(^mytesta(2))
	KILL ^mytesta,^mytestb
}
DHC-APP>d ##class(PHA.TEST.Function).SORTBEGIN2()
1
2
$SORTEND returns: 5
global sets committed?: 1
/// d ##class(PHA.TEST.Function).SORTBEGIN3()
ClassMethod SORTBEGIN3()
{
	WRITE $SORTBEGIN(^mytesta),!
	SET ^mytesta(1)="apple"
	SET ^mytesta(2)="orange"
	SET ^mytesta(3)="banana"
	WRITE $SORTBEGIN(^mytestb),!
	SET ^mytestb(1)="corn"
	SET ^mytestb(2)="carrot"
	WRITE "$SORTEND returns: ",$SORTEND(,0),!
	WRITE "global sets committed?: ",$DATA(^mytesta(2))
	
	KILL ^mytesta,^mytestb
}
DHC-APP>d ##class(PHA.TEST.Function).SORTBEGIN3()
1
2
$SORTEND returns: 5
global sets committed?: 0

相關文章