【问题标题】:How to handle group level variable in oracle PL/SQL, so that i can access individual as well as group level variable?如何在 oracle PL/SQL 中处理组级变量,以便我可以访问个人和组级变量?
【发布时间】:2018-07-19 18:37:01
【问题描述】:

目前我们正致力于将 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 访问各个子变量。但是如果我必须同时访问这两个变量,我认为没有手动连接就没有办法。

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

【问题讨论】:

  • 我不确定您所说的“同时访问两个变量”是什么意思。在什么意义上你不能访问它们?
  • 如果我对您的理解正确,您是说 COBOL 将两个数字连接起来,就好像它们是文本一样?这很奇怪。你有一些我们可以看到的示例代码吗?这可以用对象来实现,但不会自动完成。
  • 因为 COBOL != PLSQL。这些编程规则不适用,您必须忘记那些旧的代码行为方式。告诉我们你最终想要做什么,而不是问如何处理这样的变量。
  • @WilliamRobertson,正如我在上面的例子中提到的,我无法显示(或使用)变量 VAR。我必须访问 VAR.CHILD_1 或 VAR.CHILD_2。我不能直接访问 VAR(应该给出 VAR.CHILD_1 和 VAR.CHILD_2 的值)。
  • @BrianLeach,以下是相同的示例:识别部门。程序 ID。你好世界。数据部门。工作存储部分。 01 家长-VAR。 05 CHILD-1 PIC 9(2) 价值 12. 05 CHILD-2 PIC 9(3) 价值 345. 程序部分。显示'父-VAR ='父-VAR。停止运行。输出为:PARENT-VAR=12345

标签: oracle plsql record cobol


【解决方案1】:

PL/SQL 使用压缩的二进制编码的十进制来编码数字。 这些不能像 Cobol 使用的未压缩 BCD 那样连接。

因此,您将不得不使用一些代码来解决问题(即 CHILD-1 * 1000 + CHILD-2 或将它们转换为 char 并使用字符串连接)。

【讨论】:

    【解决方案2】:

    看看计算列。 (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 知之甚少的人来说太过分了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 2022-11-21
      • 2012-03-30
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多