Как получить ROWID из базы данных Progress - PullRequest
4 голосов
/ 19 сентября 2008

У меня есть база данных Progress, из которой я выполняю ETL. В одной из таблиц, из которых я читаю, нет уникального ключа, поэтому мне нужен доступ к ROWID, чтобы можно было однозначно идентифицировать строку. Каков синтаксис для доступа к ROWID в прогрессе?

Я понимаю, что есть проблемы с использованием ROWID для идентификации строк, но это все, что у меня есть сейчас.

Ответы [ 4 ]

8 голосов
/ 19 сентября 2008

Быстрое предупреждение для моего ответа - прошло почти 10 лет с тех пор, как я работал с Progress , поэтому мои знания, вероятно, более чем устарели.

Проверка справки по языку прогресса [PDF], кажется, показывает, что две функции, которые я помню, все еще здесь: ROWID и RECID. Функция ROWID новее и предпочтительнее.

В Progress 4GL вы бы использовали что-то вроде этого:

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

или

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

Проверка справки по SQL Progress [PDF] показывает, что ROWID также доступен в SQL как расширение Progress. Вы бы использовали это так:

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

Редактировать: Отредактировано по отзывам Стефана.

5 голосов
/ 22 июня 2009

В зависимости от вашей ситуации и поведения приложения это может иметь значение, а может и не иметь значения, но вы должны знать, что ROWID и RECID повторно используются и могут меняться.

1) Если запись удалена, ее ROWID будет в конечном итоге использоваться повторно.

2) Если таблица реорганизуется с помощью функции dump & load или перемещения таблицы в новую область хранения, то значения ROWID изменятся.

2 голосов
/ 19 сентября 2008

Просто добавлю немного ответов Дейва Уэбба. Я попытался ROWID в операторе выбора, но мне дали синтаксическую ошибку. ROWID работает только если вы указываете оставшиеся столбцы для выбора, вы не можете использовать *.

Это НЕ работает:

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

Это работает:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
0 голосов
/ 19 сентября 2008

Быстрый поиск в Google показывает это: http://bytes.com/forum/thread174440.html

Прочтите сообщение внизу по адресу greg@turnstep.com (вы хотите либо oid, либо ctid, в зависимости от того, что гарантирует вам постоянство и уникальность)

...