如何在Oracle PL / SQL中处理组级别变量,以便我可以访问个人以及组级别变量?

时间:2018-07-19 18:37:02

标签: oracle plsql record cobol

当前,我们正在努力将COBOL代码迁移到oracle PL / SQL中。在COBOL中,有一个记录/组级别​​变量的概念,例如。

    01 PARENT-VAR.
       05 CHILD-1 PIC 9(2) VALUE 12.
       05 CHILD-2 PIC 9(3) VALUE 345.

基本上,这意味着我们可以访问单个变量CHILD- 1或CHILD-2。同样,如果我们访问PARENT-VAR,我们将获得两个子变量的值,它们自动关联为:12345

如果我们尝试在PL / SQL中实现相同的概念,则可以将IS RECORD用作:

 TYPE TYP_PARENT_VAR IS RECORD
 ( CHILD-1 NUMBER(2) := 12,
   CHILD-2 NUMBER(3) := 345);

   VAR TYP_PARENT_VAR;

现在,我可以以VAR.CHILD-1VAR.CHILD-2的形式访问各个子变量。但是,如果我必须一次访问两个变量,那么没有手动连接就无法实现。

我们如何访问父项和子项?

2 个答案:

答案 0 :(得分:1)

PL / SQL使用压缩的二进制编码的十进制对数字进行编码。 不能像Cobol使用的未压缩BCD那样串联这些文件。

因此,您将不得不使用一些代码来完成操作(即CHILD-1 * 1000 + CHILD-2或将其转换为char并使用字符串连接)。

答案 1 :(得分:0)

看看计算列。 (SQL语法并不是我真正的事,所以这可能是错误的)

ALTER TABLE cobol_record
  add column parent_var COMPUTED BY concat(to_char(child_1), to_char(child_2));

或者在创建期间执行

CREATE TABLE cobol_record
(
  child_1  number(2),
  child_2  number(3),
  parent_var COMPUTED BY CONCAT(TO_CHAR(child_1), TO_CHAR(child_2))
)

它不会在表中占用空间,但是可以让您进行所需的任何串联。是的,这是手动连接,但在表定义期间仅一次。从我所读的内容中,这些字段直到需要时才进行计算,因此性能不会受到太大影响。

同样,该语法是一窍不通的,对Oracle SQL知之甚少。