zl程序教程

您现在的位置是:首页 >  工具

当前栏目

第三十章 Caché 命令大全 VIEW 命令

命令 大全 View Cach
2023-09-11 14:15:37 时间

第三十章 Caché 命令大全 VIEW 命令

读写数据库块并修改内存中的数据。

重点

  1. InterSystems建议避免使用VIEW命令。在任何环境中使用时,它都可能破坏内存结构。
  2. 错误地使用VIEW容易损坏内存或Caché数据库。
  3. openclose一起用。单独使用不会有反映。

大纲

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的整数。还可以使用字母CP表示当前平台上地址字段(指针)的大小。

如果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命令打开视图缓冲区。

  1. 打开视图缓冲区。视图缓冲区指定为设备编号63。因此,命令为:
   OPEN 63:location

其中location是包含要与视图缓冲区关联的CACHE.DAT文件的名称空间。该位置是特定于实现的。 OPEN 63命令通过分配系统内存区域来创建视图缓冲区,该区域的大小等于Caché数据库使用的块大小。

  1. 使用VIEW块形式从关联的Caché数据库中读取一个块。将块指定为正整数。例如:
  VIEW 4

本示例将Caché数据库中的第四个块读入视图缓冲区。由于视图缓冲区的大小等于Caché数据库中使用的块大小,因此在任何给定时间,视图缓冲区只能包含一个块。在阅读后续块时,每个新块都会覆盖当前块。要确定要从Caché数据库读取的块,应该熟悉文件的结构。

  1. 使用$VIEW功能检查块中的数据,或使用VIEW命令对其进行修改。
  2. 如果更改了视图缓冲区中的任何数据,请将其写回到Caché数据库。要写入数据,请使用VIEW块形式,但为块指定一个负整数。块编号通常与视图缓冲区中当前块的编号匹配,但并非必须如此。指定的块号标识文件缓冲区中的块将替换(覆盖)文件中的哪个块。例如,VIEW -5将Caché数据库中的第五个块替换为视图缓冲区中的当前块。
  3. 使用CLOSE 63关闭视图缓冲区。

在Caché数据库之间传输块

当打开视图缓冲区时,Caché不会自动清除现有块。这使可以按照以下顺序将数据块从一个Caché数据库传输到另一个数据库:

  1. 使用OPEN 63并指定包含第一个Caché数据库的名称空间。
  2. 使用VIEW将所需的块从文件读取到视图缓冲区中。
  3. 如有必要,请使用VIEW修改视图缓冲区中的数据。
  4. 再次使用OPEN 63,并指定包含第二个Caché数据库的名称空间。
  5. 使用VIEW将块从视图缓冲区写入第二个Caché数据库。
  6. 使用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仅由完整性检查实用程序使用