عادةً ما يكون تحويل البيانات بتنسيق سلسلة بين أنواع بيانات مختلفة عملية مباشرة في Oracle ، ولكن بعض الحالات تكون أكثر صعوبة من غيرها. يحدث أحد هذه المشكلات عند استخدام Oracle لتحويل clob إلى varchar2 ، وهو أمر صعب لأن ملف يحتوي عمود varchar2 على 4000 حرف كحد أقصى ، بينما يمكن لـ clob تخزين كميات هائلة من الأحرف البيانات. لا يزال بإمكانك تحقيق هدفك ، باستخدام طريقة dbms_lob substr أو to_char وتحديد الحجم الأقصى.
شرح CLOB و VARCHAR2
CLOB (أو "clob" بالعامية) هو اختصار لعبارة "كائن كبير على شكل حرف" ، ويمكنه تخزين ما يصل إلى 4 جيجابايت من البيانات. يتم استخدامه بواسطة العديد من أنظمة قواعد البيانات ، بما في ذلك DB2 و Oracle. يعد CLOB مفيدًا عندما تحتاج إلى تخزين كميات هائلة من البيانات ، ولكن الحجم نفسه يمكن أن يسبب مشاكل في بعض المواقف. هذا هو السبب في أن التحويل من Oracle CLOB إلى تنسيق سلسلة بحجم يسهل إدارته غالبًا ما يكون أسلوبًا جيدًا قبل إجراء العمليات.
فيديو اليوم
يخزن تنسيق VARCHAR2 كميات أصغر من البيانات ، تصل عادةً إلى 4000 بايت ، إلا إذا كنت تستخدم أقصى حجم سلسلة ممتد ، وفي هذه الحالة يمكن أن يصل إلى 32767 بايت. بالنسبة لمجموعة الأحرف أحادية البايت ، يمكنك عادةً الحصول على ما يصل إلى 4000 حرف في العمود. التناقض بين الحجم الأقصى لتنسيقي البيانات هذين هو المكان الذي تنشأ فيه المشاكل أثناء التحويل.
طريقة dbms_lob الفرعية
لتحويل سلسلة clob إلى varchar2 ، افتح برنامج SQL * Plus. بناء الجملة للتحويل الذي تحتاج إلى إجرائه هو:
حدد dbms_lob.substr (clob_column ، for_how_many_bytes ، from_which_byte) من الجدول
هنا القيم الموجودة بين قوسين هي القيم التي يجب عليك تغييرها ، وكذلك "الجدول" في النهاية. تتوافق هذه مع العمود ("clob_column") والجدول الذي تعمل معه. يمنحك "for_how_many_bytes" الفرصة لتحديد عدد بايتات البيانات التي تريد تحويلها ، ويسمح لك الخيار "from_which_byte" بتحديد نقطة البداية.
لذلك ، إذا كان لديك جدول يسمى "الضرائب" وحقل يسمى "net_pay" ، وبافتراض أنك تريد 4000 بايت بدءًا من الأول ، فسيتعين عليك إدخال:
حدد dbms_lob.substr (net_pay، 4000، 1) من الضرائب
لتحويل السلسلة إلى تنسيق varchar2.
طريقة TO_CHAR
يمكنك أيضًا استخدام الأمر TO_CHAR بصيغة مشابهة جدًا لتحقيق نفس الهدف:
حدد TO_CHAR (SUBSTR (clob_column، 0.3999)) من الجدول
هنا ، يتم تحديد بايت البداية والنهاية على أنها 0 و 3999 (لسلسلة تبدأ من 4000 حرف من البداية) ، ولكن يتم استخدام حقلي "clob_column" و "الجدول" بالطريقة نفسها تمامًا مثل قبل. لذلك ، في نفس المثال ، يمكنك إدخال:
حدد TO_CHAR (SUBSTR (net_pay، 0.3999)) من الضرائب
بشكل أساسي ، بدلاً من إكمال العملية في خطوة واحدة ، يستخدم هذا الأمر SUBSTR لسحب سلسلة فرعية من السلسلة الأكبر ، ثم يستخدم "to_char" للتعامل مع التحويل. إذا كان عمود clob المعني يحتوي على أقل من 4000 بايت من المعلومات ، فيمكنك إدخال اسم العمود بين الأقواس بعد to_char بدلاً من تحديد سلسلة فرعية.