【问题标题】:How to get the ROWID from a Progress database如何从进度数据库中获取 ROWID
【发布时间】:2008-09-18 22:04:30
【问题描述】:

我有一个正在执行 ETL 的 Progress 数据库。我正在读取的表之一没有唯一键,因此我需要访问 ROWID 才能唯一标识该行。访问正在进行的 ROWID 的语法是什么?

我了解使用 ROWID 进行行识别存在问题,但我现在只有这些。

【问题讨论】:

    标签: database progress-4gl progress-db


    【解决方案1】:

    对我的回答有一个简短的警告 - 我与 Progress 合作已经快 10 年了,所以我的知识可能已经过时了。

    检查Progress Language Reference [PDF] 似乎显示了我记得的两个函数仍然存在:ROWIDRECIDROWID 函数较新,是首选。

    在 Progress 4GL 中,你会像这样使用它:

    FIND customer WHERE cust-num = 123.
    crowid = ROWID(customer).
    

    或:

    FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.
    

    检查Progress SQL Reference [PDF] 显示ROWID 在 SQL 中也可用作 Progress 扩展。你会这样使用它:

    SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
    

    编辑:根据 Stefan 的反馈进行编辑。

    【讨论】:

    • 您应该在前两个示例中添加一个 NO-ERROR,并在第一个示例中添加一个 IF AVAIL 客户 THEN,然后再分配 ROWID。作为替代方案,您可以将 assign 语句放在 FOR FIRST CUSTOMER NO-LOCK WHERE 中...只是在没有匹配客户时避免错误消息的方法。
    【解决方案2】:

    根据您的情况和应用程序的行为,这可能会或可能不重要,但您应该知道 ROWID 和 RECID 被重复使用并且它们可能会改变。

    1) 如果一条记录被删除,它的 ROWID 最终会被重用。

    2) 如果表通过转储和加载或 tablemove 重新组织到新的存储区域,则 ROWID 将更改。

    【讨论】:

      【解决方案3】:

      只是为 Dave Webb 的答案添加一点内容。我曾在 select 语句中尝试过 ROWID,但出现语法错误。 ROWID 仅在您指定要选择的其余列时才有效,您不能使用 *。

      这不起作用:

      SELECT ROWID, * FROM customer WHERE cust-num = 123
      

      这确实有效:

      SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
      

      【讨论】:

      • 很高兴知道。当我使用 Progress 时,一切都是关于 4GL 的,而且 SQL 支持是相当新的,所以我从来没有用 SQL 查询过 Progess DB。从我的记忆中可以看出,这是一个很棒的数据库,有着很好的架构,可惜它很少被使用。
      • 一旦你指定了一个列,你必须在 * 前面加上表名。因此,在示例中,SELECT RowID, "cust-num".* FROM ... 可以工作
      【解决方案4】:

      一个快速的谷歌搜索出现了这个: http://bytes.com/forum/thread174440.html

      阅读 greg@turnstep.com 底部的消息(您需要 oid 或 ctid,具体取决于您想要的持久性和唯一性保证)

      【讨论】:

      • 我有一个 Progress 数据库,而不是 PostgreSQL 数据库。
      • 常见错误,没有多少人听说过Progress :-)
      猜你喜欢
      • 1970-01-01
      • 2018-04-10
      • 2017-03-16
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多