3
  1. 如何在 PICK/UniVerse 数据库中声明一个常量值?
  2. 如何通过常量引用将参数传递给函数?

IBM 的 UniVerse 数据库手册中有一些关于常量的信息,但没有特别说明。

请注意:

DEFINE 语句值

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

有谁知道如何声明这些?

谢谢。

4

3 回答 3

4

它与 UniData(UniVerse 的姊妹数据库;两者统称为 U2)中的语句相同,即:EQUEQUATE

例如:

EQU statement TO value

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


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

例如:

CALL MySub(PassByRef, (PassByValue))

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

于 2011-02-11T04:44:17.063 回答
2

在使用变量之前,您不需要定义变量Pick/Universe

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

EQU PI TO 3.14

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

PI = 3.14

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

于 2013-01-15T05:59:18.317 回答
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
于 2011-04-07T16:48:44.510 回答