使用^GETPPGINFO

84 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第43天,点击查看活动详情

使用^GETPPGINFO

  • 使用^GETPPGINFO工具以块为单位显示当前进程私有全局变量及其空间分配^GETPPGINFO不列出进程私有全局变量的下标或值。可以通过指定进程ID(PID)来显示特定进程的进程私有全局变量,也可以通过指定“*”通配符字符串来显示所有进程的进程私有全局变量。
  • 必须在%SYS命名空间中才能调用^GETPPGINFO
	s ^||fruit("apple","red") = "apple red"
	s ^||fruit("banana","yellow") = "banana yellow"
	s ^||fruit("pear","blue") = "pear blue"
	s ^||person("china","悟空")="china 悟空"
	s ^||person("usa","美国队长")="usa 美国队长"
	s $namespace = "%SYS"
	d ^GETPPGINFO("*")
	s $namespace = "dhc-app"
  • 指定进程ID显示信息。
Process ID: 28668 --> Total PPG Block count 7, block size 8,192
     PPG: fruit uses 2 blocks
     PPG: person uses 2 blocks
  • 将进程globe导出
%SYS>d ^GETPPGINFO("*","T","E:/temp/ppg.txt")
%SYS>d ^GETPPGINFO("*","MNN","E:/temp/ppg.txt")

全局变量

  • 全局变量是一种特殊类型的变量,它自动存储在Caché数据库中。它被映射到特定的命名空间,并且只能在该命名空间内访问,除非使用扩展引用。全局可以由任何进程访问。全局在创建它的进程终止后仍然存在。它会一直存在,直到被明确删除。
 	s mylocal = "这是局部变量"
 	s ^myglobal = "这是存储在当前命名空间中的全局变量"
%SYS>zw ^|"dhc-app"|myglobal
^|"dhc-app"|myglobal="这是存储在当前命名空间中的全局变量"
  • 将全局的设置或终止视为日志记录的事务事件;回滚事务将撤消这些操作。
	k ^myglobal("a")
	zw ^myglobal("a")
	ts
	s ^myglobal("a") = "tro"
	tro
	zw ^myglobal("a")
  • 全局名称限制为31个字符,不包括前缀字符。可以指定长度超过31个字符的名称,但仅使用前31个字符。因此,全局名称的前31个字符必须是唯一的。
	s ^abcdef1234abcdef1234abcdef1234a = 1
	s ^abcdef1234abcdef1234abcdef1234ab = 2
	zw ^abcdef1234abcdef1234abcdef1234ab
  • 可以使用$ZREFERENCE特殊变量来确定最近使用的全局变量的名称。可以使用$QSUBSCRIPT函数返回指定全局变量节点的名称,或使用$QLENGTH函数返回下标的数量。
	s ^color(1) = "red"
	s ^color(2) = "yellow"
	s ^color(3) = "write"
	s ^color(4) = "black"
	s ^color(5) = "green"

	s ID = ""
	for {
		s ID = $o(^color(ID))
		q:(ID = "")
		s data = $zr
		w "$ZREFERENCE:" _ @data,!
		w "$QSUBSCRIPT:" _ $qs($zr,0),!
		w "$QLENGTH:" _ $ql($zr),!
		
	}
  • 对于当前进程,局部变量名必须是唯一的。其他进程可能具有同名的局部变量。进程全局变量或全局变量可以与局部变量,百分比变量同名。例如:yx^||yx^yx%yx是个不同的变量。
	k ^yx, ^||yx
	s yx = 1
	w yx,!
	s ^||yx = 2
	zw ^||yx
	s ^yx = 3
	zw ^yx
	s %yx =4
	w %yx,!
1
^||yx=2
^yx=3
4
  • 推荐变量使用顺序局部变量 -> 进程全局变量 -> 全局变量。百分比变量看情况使用。

下标变量与数组变量

  • 局部变量、进程私有变量和全局变量都可以采用下标。
  • 下标的最大长度为511个编码字节。超过最大下标长度会导致错误。但是,允许的最长整数是309位;超过此限制将导致<MAXNUMBER>错误。因此,必须将长度超过309个字符的数字下标指定为字符串。
  • 局部变量的最大下标级别数为255。全局变量或进程私有全局变量的最大下标级别数为253。超过最大下标级别数会导致错误。
  • 下标为数字的为数组变量。下标变量包含数组变量。

变量类型和转换

fromto规则
NumberString使用表示数字值的字符串,例如上例中变量num2.2
StringNumber字符串的前导字符被解释为数字文字,例如,“-1.20abc”被解释为-1.2,而“abc123”被解释为0
ObjectNumber使用给定对象引用的内部对象实例编号。该值为整数。
ObjectString使用n@cls形式的字符串,其中n是内部对象实例编号,cls是给定对象的类名。
NumberObject不允许
StringObject不允许

使用#Dim定义变量类型

  • 在Studio中编写代码时,可以使用#Dim预处理器指令。#Dim提供有关所需变量类型的信息。Studio使用此信息通过Studio Assist功能完成代码。
	#Dim President As %String = "yaoxin"
	w President,!