كيفية الحصول على ROWID من قاعدة بيانات التقدم
-
01-07-2019 - |
سؤال
لدي قاعدة بيانات التقدم التي أقوم بإجراء ETL منها.لا يحتوي أحد الجداول التي أقرأ منها على مفتاح فريد، لذا أحتاج إلى الوصول إلى ROWID حتى أتمكن من تحديد الصف بشكل فريد.ما هو بناء الجملة للوصول إلى ROWID قيد التقدم؟
أدرك أن هناك مشكلات في استخدام ROWID لتحديد الصف، ولكنه كل ما لدي الآن.
المحلول
تحذير سريع لإجابتي - لقد مضى ما يقرب من 10 سنوات منذ أن عملت معهم تقدم لذلك ربما تكون معرفتي قديمة جدًا.
فحص مرجع لغة التقدم يبدو أن [PDF] يُظهر أن الوظيفتين اللتين أتذكرهما ما زالتا موجودتين: ROWID
و RECID
.ال ROWID
الوظيفة أحدث ومفضلة.
في Progress 4GL يمكنك استخدامه بشيء من هذا القبيل:
FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).
أو:
FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.
فحص التقدم المرجعي SQL [بي دي إف] يظهر ROWID
متاح أيضًا في SQL كملحق للتقدم.ستستخدمه هكذا:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
يحرر: تم التعديل بعد تعليقات ستيفان.
نصائح أخرى
اعتمادًا على موقفك وسلوك التطبيق، قد يكون هذا مهمًا أو لا يهم، ولكن يجب أن تدرك أنه يتم إعادة استخدام ROWIDs وRECIDs وأنها قد تتغير.
1) إذا تم حذف السجل، فسيتم إعادة استخدام ROWID في النهاية.
2) إذا تمت إعادة تنظيم الجدول عبر التفريغ والتحميل أو نقل الجدول إلى منطقة تخزين جديدة، فسوف تتغير معرفات ROWID.
فقط لإضافة القليل إلى إجابات ديف ويب.لقد قمت بتجربة ROWID في عبارة التحديد ولكن تم إعطائي خطأ في بناء الجملة.يعمل ROWID فقط إذا قمت بتحديد بقية الأعمدة لتحديدها، فلا يمكنك استخدام *.
هذا لا يعمل:
SELECT ROWID, * FROM customer WHERE cust-num = 123
هذا يعمل:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
بحث سريع في جوجل يظهر هذا:http://bytes.com/forum/thread174440.html
اقرأ الرسالة الموجودة في الأسفل بواسطة greg@turnstep.com (إما تريد oid أو ctid اعتمادًا على الضمانات التي تريدها لإعادة الثبات والتفرد)