美文网首页
第三十章 Caché 命令大全 VIEW 命令

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

作者: Cache技术分享 | 来源:发表于2020-08-01 14:57 被阅读0次

    第三十章 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 仅由完整性检查实用程序使用

    相关文章

      网友评论

          本文标题:第三十章 Caché 命令大全 VIEW 命令

          本文链接:https://www.haomeiwen.com/subject/iqwlrktx.html