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

sql/plsql का उपयोग करके, आप कैसे पता लगाते हैं कि टेक्स्ट किस वर्ण सेट का उपयोग करता है?

Oracle Globalization Development Kit वर्ण सेट का पता लगा सकते हैं।

जीडीके ओरेकल के साथ शामिल है लेकिन यह डिफ़ॉल्ट रूप से डेटाबेस में स्थापित नहीं है। डेटाबेस में .jar फ़ाइलों को लोड करने के लिए Oraclehome में jlib निर्देशिका खोजें और इस ऑपरेटिंग सिस्टम कमांड को चलाएं:

loadjava -u [email protected] orai18n.jar orai18n-collation.jar orai18n-lcsd.jar orai18n-mapping.jar orai18n-net.jar orai18n-servlet.jar orai18n-tools.jar orai18n-translation.jar orai18n-utility.jar

कुछ अतिरिक्त जावा विशेषाधिकारों की आवश्यकता है, भले ही आपके उपयोगकर्ता के पास डीबीए हो। इस कमांड को रन करें और फिर से कनेक्ट करें:

exec dbms_java.grant_permission( 'YOUR_USER_NAME', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );

पता लगाने के लिए जावा क्लास बनाएं। नीचे एक बहुत ही सरल उदाहरण दिया गया है जो एक स्ट्रिंग के लिए सबसे अच्छा अनुमान देता है:

create or replace and compile java source named "Character_Set_Detector"
as
import oracle.i18n.lcsd.*;
import java.sql.*;
import java.io.IOException;
public class Character_Set_Detector
{
    public static String detect(Blob some_blob) throws SQLException, IOException
    {
        LCSDetector detector = new LCSDetector();
        detector.detect(some_blob.getBinaryStream());
        LCSDResultSet detector_results = detector.getResult();
        return detector_results.getORACharacterSet();
    }
}
/

जावा क्लास को PL/SQL फ़ंक्शन में लपेटें:

--Wrap the Java class in a PL/SQL function:
create or replace function detect_character_set(some_blob blob)
return varchar2
as language java
name 'Character_Set_Detector.detect(java.sql.Blob) return java.lang.String';
/

मैंने अलग-अलग भाषाओं में एक स्ट्रिंग का अनुवाद करके, टेक्स्ट एडिटर के साथ टेक्स्ट को अलग-अलग एन्कोडिंग के रूप में सहेजकर, हेक्स संपादक के साथ फ़ाइल खोलकर और हेक्स को बीएलओबी में परिवर्तित करके अलग-अलग वर्ण सेटों का अनुकरण किया:

--UTF8
--The quick brown fox jumps over the lazy dog
select 1 id, detect_character_set(hextoraw('54686520717569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f67')) character_set from dual union all
--Western European (ISO-8859-1)
--El zorro marrón rápido salta sobre el perro perezoso
select 2 id, detect_character_set(hextoraw('456c207a6f72726f206d617272f36e2072e17069646f2073616c746120736f62726520656c20706572726f20706572657a6f736f')) from dual union all
--Chinese Simplified (GBK)
--敏捷的棕色狐狸跳过懒狗
select 3 id, detect_character_set(hextoraw('c3f4bdddb5c4d7d8c9abbafcc0eaccf8b9fdc0c1b9b7')) from dual union all
--Western European (Windows-1252)
--Der schnelle braune Fuchs springt über den faulen Hund
select 4 id, detect_character_set(hextoraw('446572207363686e656c6c6520627261756e6520467563687320737072696e677420fc6265722064656e206661756c656e2048756e64')) from dual union all
--Cyrillic (KOI8-R)
--Быстрая коричневая лиса прыгает через ленивую собаку
select 5 id, detect_character_set(hextoraw('e2d9d3d4d2c1d120cbcfd2c9decec5d7c1d120ccc9d3c120d0d2d9c7c1c5d420dec5d2c5da20ccc5cec9d7d5c020d3cfc2c1cbd5')) from dual;

ID  CHARACTER_SET
--  -------------
1   US7ASCII
2   WE8ISO8859P1
3   ZHS16CGB231280
4   WE8ISO8859P1
5   CL8KOI8R

वह मामूली उदाहरण अच्छी तरह से काम करता है लेकिन मुझे नहीं पता कि यह वास्तविक दुनिया की फाइलों के साथ कितना अच्छा काम करेगा। जीडीके में बहुत सारी विशेषताएं हैं, उपरोक्त कोड केवल एक साधारण प्रारंभिक बिंदु है। केवल मामूली परिवर्तनों के साथ कोड मेरे उत्तर यहां में प्रदर्शित भाषाओं का भी पता लगा सकता है। ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल * प्लस :इसे एक त्रुटि कोड वापस करने के लिए मजबूर करें

  2. oracle 11g या 12c . में तालिका/स्तंभ/सूचकांक नाम आकार बदलें

  3. कैसे देखें कि किसी अन्य उपयोगकर्ता के स्कीमा को कौन से विशेषाधिकार दिए गए हैं

  4. जावा एसक्यूएल अपवाद:बंद परिणामसेट:अगला भले ही न तो कनेक्शन या परिणामसेट बंद हो जाता है

  5. Oracle - कुल कार्यों के साथ संयुक्त रिटर्निंग