Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

BLOB कॉलम में टेक्स्ट को बदलना

REPLACE निम्नलिखित डेटाटाइप पर काम करता है:

<ब्लॉकक्वॉट>

दोनों search_string और प्रतिस्थापन_स्ट्रिंग, साथ ही चार, कोई भी डेटा प्रकार CHAR हो सकते हैं , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB , या NCLOB

आपने वर्ण डेटा को बाइट्स (BLOB) के संग्रह के रूप में संग्रहीत करना चुना है। इन पर सीधे तौर पर काम नहीं किया जा सकता है क्योंकि बीएलओबी का कोई संदर्भ नहीं होता है और यह केवल एक बहुत बड़ी संख्या होती है। इसे आपके . के बिना वर्णों में नहीं बदला जा सकता इनपुट:बाइनरी डेटा को टेक्स्ट में बदलने के लिए आपको इसके कैरेक्टर सेट की आवश्यकता होती है।

आपको या तो फ़ंक्शन को कोड करना होगा REPLACE स्वयं (DBMS_LOB.instr का उपयोग करके) उदाहरण के लिए) या अपने डेटा को एक व्यावहारिक CLOB में कनवर्ट करें और CLOB पर मानक फ़ंक्शन का उपयोग करें।

मैं आपके कॉलम के डेटाटाइप को बदलने की दृढ़ता से सलाह दूंगा। यह भविष्य में आपके सामने आने वाली किसी भी अन्य वर्ण सेट रूपांतरण त्रुटि को रोकेगा।

यदि आप वास्तव में ब्लॉब्स के साथ काम करना चाहते हैं, तो इस तरह के कार्यों का उपयोग करें:

SQL> CREATE OR REPLACE FUNCTION convert_to_clob(l_blob BLOB) RETURN CLOB IS
  2     l_clob         CLOB;
  3     l_dest_offset  NUMBER := 1;
  4     l_src_offset   NUMBER := 1;
  5     l_lang_context NUMBER := dbms_lob.default_lang_ctx;
  6     l_warning      NUMBER;
  7  BEGIN
  8     dbms_lob.createtemporary(l_clob, TRUE);
  9     dbms_lob.converttoclob(dest_lob     => l_clob,
 10                            src_blob     => l_blob,
 11                            amount       => dbms_lob.lobmaxsize,
 12                            dest_offset  => l_dest_offset,
 13                            src_offset   => l_src_offset,
 14                            blob_csid    => nls_charset_id('AL32UTF8'),
 15                            lang_context => l_lang_context,
 16                            warning      => l_warning);
 17     RETURN l_clob;
 18  END convert_to_clob;
 19  /

Function created

SQL> CREATE OR REPLACE FUNCTION convert_to_blob(l_clob CLOB) RETURN BLOB IS
  2     l_blob         BLOB;
  3     l_dest_offset  NUMBER := 1;
  4     l_src_offset   NUMBER := 1;
  5     l_lang_context NUMBER := dbms_lob.default_lang_ctx;
  6     l_warning      NUMBER;
  7  BEGIN
  8     dbms_lob.createtemporary(l_blob, TRUE);
  9     dbms_lob.converttoblob(dest_lob     => l_blob,
 10                            src_clob     => l_clob,
 11                            amount       => dbms_lob.lobmaxsize,
 12                            dest_offset  => l_dest_offset,
 13                            src_offset   => l_src_offset,
 14                            blob_csid    => nls_charset_id('AL32UTF8'),
 15                            lang_context => l_lang_context,
 16                            warning      => l_warning);
 17     RETURN l_blob;
 18  END convert_to_blob;
 19  /

Function created

आप इन कार्यों को सीधे SQL से कॉल कर सकते हैं:

SQL> UPDATE ape1_item_version
  2     SET DYNAMIC_DATA = convert_to_blob(
  3                          REPLACE(convert_to_clob(DYNAMIC_DATA),
  4                                 'Single period',
  5                                 'Single period period set1')
  6                          )
  7   WHERE NAME = 'PRIT ALL POOL for Duration Telephony 10_NA_G_V_H_N_Z2';

1 row updated


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ADO.NET/C# के माध्यम से Oracle (ODP.NET 10g) में ऐरे/टेबल पैरामीटर का उपयोग कैसे करें?

  2. यदि मौजूद नहीं है तो Oracle सम्मिलित करें कथन

  3. ORA-12728:रेगुलर एक्सप्रेशन में अमान्य श्रेणी

  4. अपवाद होने पर डेटाबेस कनेक्शन को बंद करने के लिए सर्वश्रेष्ठ डिज़ाइन पैटर्न

  5. crfclust.bdb . से उच्च स्थान का उपयोग