当前,我们正在努力将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-1
或VAR.CHILD-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知之甚少。