第三十章 Caché 命令大全 VIEW 命令
读写数据库块并修改内存中的数据。
重点
- InterSystems建议避免使用
VIEW
命令。在任何环境中使用时,它都可能破坏内存结构。 - 错误地使用
VIEW
容易损坏内存或Caché数据库。 - 与
open
,close
一起用。单独使用不会有反映。
大纲
VIEW:pc viewargument
V:pc viewargument
其中viewargument是以下之一:
block
offset:mode:length:newvalue
参数
- pc - 可选-后置条件表达式。
- block 块位置,指定为整数。
- offset 与mode指定的内存区域中的基址之间的偏移量(以字节为单位)。
- mode 该存储区的基址将用于计算要修改的数据。
- length 要修改的数据的长度。
- newvalue 替换值要存储在存储位置。
描述
VIEW
命令读取和写入数据库块,并在内存中写入位置。 VIEW
有两种参数形式:
VIEW
块在Caché数据库和内存之间传输数据。
查看offset:mode:length:newvalue将newvalue放置在由offset,mode和length标识的内存位置中。
可以使用$VIEW
功能检查内存中的数据。
InterSystems建议避免使用VIEW命令。在任何环境中使用时,它都可能破坏内存结构。
参数
pc
可选的后置条件表达式。如果后置条件表达式为true(计算为非零数值),则Caché执行命令。如果后置条件表达式为假(计算为零),则Caché不执行命令。
block
块位置,指定为整数。如果block是一个正整数,则VIEW
将该数字块读入视图缓冲区。如果block为负整数,则VIEW
将当前在视图缓冲区中的块写入该块地址。块和offset:mode:length:newvalue参数是互斥的。
如果该块已经在内存缓冲区中,则缓冲区的当前内容将被复制。
块位置0不是有效位置。尝试指定VIEW 0
会导致错误。
offset
与mode指定的内存区域中的基址之间的偏移量(以字节为单位)。
mode
该存储区的基址将用于计算要修改的数据。
length
要修改的数据的长度。
将字节数指定为1到4或8的整数。还可以使用字母C
或P
表示当前平台上地址字段(指针)的大小。
如果newvalue定义了字符串,则将字节数指定为负整数(从1开始)。如果newvalue的长度超过此数字,则Caché会忽略无关的字符。如果newvalue的长度小于此数字,则Caché将存储提供的字符,并保留其余存储位置不变。
要以相反顺序存储字节值(最低地址处的低位字节),请在长度数字后加上字母O,并将两者都用双引号引起来。
newvalue
替换值要存储在存储位置。
示例
下面的示例将Caché数据库中的第六个块读入视图缓冲区:
VIEW 6
下面的示例大概在修改数据之后,将视图缓冲区写回到Caché数据库的第六个块:
VIEW -6
下面的示例将字符串“WXYZ”
复制到四个字节,从视图缓冲区的偏移量ADDR
开始。表达式$VIEW(ADDR,0,-4)
将产生值“WXYZ”
:
VIEW ADDR:0:-4:"WXYZ"
注意
谨慎使用VIEW
请谨慎使用VIEW
命令。它通常用于调试和修复Caché数据库和Caché系统信息。错误地使用VIEW
容易损坏内存或Caché数据库。
VIEW
使用限制
VIEW
命令是受限制的系统功能。这是受保护的命令,因为调用的代码位于CACHESYS数据库中。
视图缓冲区
当用于读取和写入数据库缓冲区时,VIEW
命令可与视图缓冲区(设备63)一起使用。视图缓冲区是一个特殊的存储区,必须先打开它,然后才能执行任何VIEW
操作。
打开视图缓冲区(使用OPEN
命令)时,表示要与视图缓冲区关联的Caché数据库(CACHE.DAT)。然后,使用VIEW
命令,可以将Caché数据库中的各个块读入视图缓冲区。
将一个块读入视图缓冲区后,可以使用$VIEW
函数检查数据。或者,可以使用VIEW
命令来修改数据。如果修改数据,则可以再次使用VIEW
命令将修改后的块写回到Caché数据库。
在Caché数据库中读取和写入数据
在使用VIEW
读写Caché数据库中的数据块之前,必须首先使用OPEN
命令打开视图缓冲区。
- 打开视图缓冲区。视图缓冲区指定为设备编号63。因此,命令为:
OPEN 63:location
其中location是包含要与视图缓冲区关联的CACHE.DAT文件的名称空间。该位置是特定于实现的。 OPEN 63
命令通过分配系统内存区域来创建视图缓冲区,该区域的大小等于Caché数据库使用的块大小。
- 使用
VIEW
块形式从关联的Caché数据库中读取一个块。将块指定为正整数。例如:
VIEW 4
本示例将Caché数据库中的第四个块读入视图缓冲区。由于视图缓冲区的大小等于Caché数据库中使用的块大小,因此在任何给定时间,视图缓冲区只能包含一个块。在阅读后续块时,每个新块都会覆盖当前块。要确定要从Caché数据库读取的块,应该熟悉文件的结构。
- 使用
$VIEW
功能检查块中的数据,或使用VIEW
命令对其进行修改。 - 如果更改了视图缓冲区中的任何数据,请将其写回到Caché数据库。要写入数据,请使用
VIEW
块形式,但为块指定一个负整数。块编号通常与视图缓冲区中当前块的编号匹配,但并非必须如此。指定的块号标识文件缓冲区中的块将替换(覆盖)文件中的哪个块。例如,VIEW -5
将Caché数据库中的第五个块替换为视图缓冲区中的当前块。 - 使用
CLOSE 63
关闭视图缓冲区。
在Caché数据库之间传输块
当打开视图缓冲区时,Caché不会自动清除现有块。这使可以按照以下顺序将数据块从一个Caché数据库传输到另一个数据库:
- 使用
OPEN 63
并指定包含第一个Caché数据库的名称空间。 - 使用
VIEW
将所需的块从文件读取到视图缓冲区中。 - 如有必要,请使用
VIEW
修改视图缓冲区中的数据。 - 再次使用
OPEN 63
,并指定包含第二个Caché数据库的名称空间。 - 使用
VIEW
将块从视图缓冲区写入第二个Caché数据库。 - 使用
CLOSE 63
关闭视图缓冲区。
DHC-APP>OPEN 63
DHC-APP>view 63
DHC-APP>close 63
修改内存中的数据
除了从Caché数据库读取和写入数据之外,VIEW
命令还允许修改视图缓冲区或其他系统内存区域中内存中的数据。
要修改数据,请使用以下格式:
VIEW offset:mode:length:newvalue
所有四个参数都是必需的。
可以通过将新值存储到内存位置来修改数据,该值指定为与mode指示的基址相比的字节偏移量。可以在length参数中指定受影响的内存量。
下表显示了mode的可能值:
Mode | 内存管理区域 | 基址 |
---|---|---|
n>0 | 进程n的地址空间,其中n是该进程的$ JOB值,即进程ID(pid)。 | 0 |
0 | 视图缓冲区 | 视图缓冲区的开始 |
-1 | 进程的分区 | 分区开始 |
-2 | 系统表 | 系统表的开头 |
-3 | 进程的地址空间 | 0 |
-6 | 保留供系统间使用 | |
-7 | 仅由完整性检查实用程序使用 |
网友评论