كيفية كتابة ثنائي النقطة على القرص ينفورميكس

StackOverflow https://stackoverflow.com/questions/1445191

  •  22-07-2019
  •  | 
  •  

سؤال

لدي بعض الصور في ينفورميكس قاعدة البيانات الثنائية النقطة الميدانية (jpg), كيف يمكنني إرسال الصور على القرص مع SQL ؟

هل كانت مفيدة؟

المحلول

يتم تخزين البيانات في بايت أو فقاعة المجال ؟

إذا كان يتم تخزين البيانات في عمود BLOB, ثم يمكنك استخدام:

SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
  FROM TheTable
 WHERE PK_Column = 23411   -- PK value

إذا كان يتم تخزين البيانات في بايت العمود ، ثم عليك أن تعمل بدلا من ذلك أكثر صعوبة.إذا كان لديك ESQL/C (ClientSDK) و برنامج التحويل البرمجي C على الجهاز الخاص بك, ثم أوصي الحصول على المساعدة SQLCMD من IIUG أرشيف البرامج واستخراج البرمجيات.تحتاج ينفورميكس البيئة ، تحتاج إلى أن تكون قادرة على تجميع ج البرامج.ثم تشغيل:

./configure --prefix=$HOME/bin

لا يهم كثيرا ما تحدده كما البادئة - تحتاج فقط لتشغيل تكوين البرنامج النصي.

ثم يمكنك إما تجميع كل شيء (make) ، أو يمكنك ببساطة تجميع البرنامج selblob (make selblob).هذا البرنامج هو ما أسميه 'المصغر';المجهري برنامج يوضح كيفية تحديد بايت النقطة إلى القرص.غير أنه أيضا بالكامل الوظيفية ؛ أنه سوف يعمل مع عادل عن أي شيء يمكنك رمي في ذلك ، أو تشخيص خطأ.

إذا كانت قاعدة البيانات الخاصة بك يسمى precious, بايت من البيانات في جدول byte_table, العمود القابضة البيانات byte_column, و المفتاح الأساسي الأعمدة col1 (القيمة المطلوبة 23) ، col2 (القيمة المطلوبة "Habeas Corpus"), ثم يمكنك تشغيل:

selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
        -c byte_column -f output_file

هذا تفريغ قيمة بايت في الملف المذكور.

إذا لم يكن لديك ESQL/C أو C compiler أو الإذن لاستخدام لهم ، ثم الحياة أكثر صعوبة.أقرب النهج هو استخدام تفريغ البيان في DB-الوصول:

dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!

هذا سوف إنشاء ملف يحتوي على عرافة-تفريغ قيمة البايت (2 بايت لكل حرف).ثم تحتاج إلى ما بعد عملية ملف لتحويل hex إلى البيانات العادية.لاحظ أنه إذا كان عمود نص عمود بدلا من بايت العمود ، ثم لا يكون التحويل اللازمة.يمكنك استخدام بسيط إلى حد ما Perl للقيام التحويل (بشرط أن يكون الملف صغير بما يكفي ليكون slurped في الذاكرة - عليك أن تعمل بجد لو كانت ليست صغيرة بما فيه الكفاية):

perl -w -e '
    $/ = "";
    my $data = <>;
    while (length($data) > 1)
    {
        my $hex = substr($data, 0, 2);
        printf "%c", hex($hex);
        $data = substr($data, 2);
    }' <output_file

طول شرط يحدد '> 1'للتعامل مع السطر في نهاية تفريغ البيانات.

(ل 'هستيري الزبيب' المعروف بـ 'لأسباب تاريخية' ، أنا لا يزال استدعاء كل بايت و نص 'النقطة أنواع', على الرغم من معرفات 9.00 عرض أسماء صريحة النقطة و CLOB ل 'الذكية النقط ، مختلفة قليلا زوج من أنواع البيانات مع ما يقرب من المقابلة الوظيفة - في كتابي, أنهم جميعا النقطة (lower-case) أنواع.هذه هي المشكلة مع رفاق العمر الذين تعلموا عن بايت و نص النقط في عام 1990 ، ست سنوات أو أكثر قبل النقطة و CLOB النقط أضيفت.في أي حال, ليس هناك بديل جيد المصطلحات الرسمية لكبار السن نمط النقط;باستخدام 'غبية النقط' ليس من الصحيح سياسيا!)

نصائح أخرى

وكنت بحاجة لكتابة برنامج صغير يقوم بالاستعلام قاعدة البيانات، وتقي النقط إلى القرص. معظم قواعد البيانات ليس لها مفهوم "فتح ملف على القرص".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top