pick / UniVerse数据库中的常量

时间:2011-02-11 02:15:57

标签: database universe multivalue-database pick

  1. 如何声明常量值 PICK / UniVerse数据库?
  2. 如何将参数传递给 通过常量参考来起作用?
  3. 关于常量的IBM UniVerse数据库手册中有一些信息,但没有特别的。

    请注意:

    DEFINE语句值

    不是我正在寻找的,因为它在编译时用值替换语句,并且不提供值的实际常量。

    有谁知道如何宣布这些?

    感谢。

3 个答案:

答案 0 :(得分:4)

这与UniData(UniVerse的姐妹数据库;两者统称为U2)的声明相同,即: EQU EQUATE < /强>

例如:

EQU statement TO value

我不完全确定你在第2点的意思,但我会给它一个挖掘。默认情况下,所有参数都是“按引用传递”,但没有const参数的形式。它仍然允许您在函数/子例程内部更改参数值,但结果不会影响调用程序/函数/子例程中等于的值。


附注:如果要确保子程序/函数不会更改您传递的实际变量的值(按值传递),您可以将其分配给临时变量并传递,或用括号括起来

例如:

CALL MySub(PassByRef, (PassByValue))

()所做的是创建PassByValue的临时副本,然后通过引用传递临时副本。这会阻止传播回PassByValue

的更改

答案 1 :(得分:2)

Pick/Universe中使用变量之前,您无需定义变量。

要分配在编译时定义的变量,请使用

EQU PI TO 3.14

要在运行时分配它,请使用

PI = 3.14

这里的主要区别是,一旦在编译时分配,使用EQUATE,变量不能被重新分配,而在运行时分配变量时,它可以是。因此,编译时的编译通常仅为常量保留,而运行时的赋值可以用于常量和标准变量值。

答案 2 :(得分:1)

我使用EQUATE语句来创建常量,如果你想让它们可用于多个程序,你应该将它们放在自己的记录中,并使用$ INCLUDE语句将定义拉到其他程序中。请注意,所有值都将在编译时建立。

对于在编译时以外的某个时间建立的“常量”,或通过标记间接引用值(传递常量引用),大多数U2程序员使用某种控制记录。由于U2中的文件系统和编程语言是如此交织在一起,所以没有人会对此进行过三次思考。我使用的大多数系统都有一个或多个名为“SOMETHING.OR.OTHER.CTRL”的文件,其中包含自由格式的记录结构。编辑器用于使用描述函数的键将数据填充到控制文件中的记录中,例如“INVENTORY.CONSTANTS”。

对于间接引用,设置记录的第一个属性具有“常量”名称多值,第二个字段具有“常量”值,也是多值。像这样:

INVENTORY.CONSTANTS:

001: JOHN*PAUL*GEORGE*RINGO
001: 100*57*83*19833

(其中“*”实际上是一个值标记)。

然后该程序将执行以下操作:

SUBROUTINE SAMPLE(CONSTANT.NAME)
     .
     .
     .
OPEN "","SOMETHING.OR.OTHER.CONTROL" TO CTRL.FILE ELSE BOMB
READ CONST.REC FROM CTRL.FILE, "INVENTORY.CONTSTANTS" THEN
  LOCATE CONSTANT.NAME IN CONST.REC<1> SETTING CONST.POS THEN
    CONST.VALUE = CONST.REC<2,CONST.POS>
  END ELSE
    BOMB
  END
END ELSE
  BOMB
END