Advertisement
Guest User

Untitled

a guest
Sep 30th, 2013
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.04 KB | None | 0 0
  1. SET DEFINE OFF
  2. CREATE OR REPLACE AND compile JAVA source named XmlNumericEncoder AS
  3. PUBLIC class XmlNumericEncoder {
  4.     PUBLIC static String encode(String xmlstring) {
  5.         String xmlstring_out = "";
  6.         FOR (int i = 0; i < xmlstring.LENGTH(); i++){
  7.             CHAR ch = xmlstring.charAt(i);        
  8.  
  9.             IF ((int)ch  >=  192 && (int)ch <= 255){
  10.                xmlstring_out += "&#" + (int)ch + ";";
  11.             } ELSE {
  12.                xmlstring_out += ch;
  13.             }
  14.         }
  15.         RETURN xmlstring_out;
  16.     }
  17. };
  18. /
  19.  
  20. CREATE OR REPLACE FUNCTION XmlNumericEncoder(xmlstring VARCHAR2)
  21.         RETURN String
  22.         AS LANGUAGE JAVA
  23.         NAME 'XmlNumericEncoder.encode(java.lang.String) return java.lang.String';
  24. /
  25.        
  26. SELECT XmlNumericEncoder('Böhmer') FROM dual;
  27. SELECT XmlNumericEncoder('Böhmer') FROM dual;
  28.  
  29. CREATE OR REPLACE FUNCTION plXmlNumericEncoder(xmlstring VARCHAR2) RETURN VARCHAR2 IS
  30.    l_result LONG;
  31.    l_char   VARCHAR2(1);
  32. BEGIN
  33.    FOR i IN 1 .. LENGTH(xmlstring) LOOP
  34.       l_char   := SUBSTR(xmlstring, i, 1);
  35.       l_result := l_result
  36.                   || CASE WHEN ASCII(l_char) BETWEEN 192 AND 255 THEN '&#' || ASCII(l_char) || ';' ELSE l_char END;
  37.    END LOOP;
  38.    RETURN l_result;
  39. END;
  40. /
  41. SELECT plXmlNumericEncoder('Böhmer') FROM dual;
  42.  
  43. SET SERVEROUTPUT ON
  44. DECLARE
  45.    l_ts_start TIMESTAMP;
  46.    TYPE tab_varchar2 IS TABLE OF VARCHAR2(2000) INDEX BY PLS_INTEGER;
  47.    l_random    tab_varchar2;
  48.    l_converted LONG;
  49. BEGIN
  50.    SELECT DBMS_RANDOM.STRING('p', 2000) BULK COLLECT INTO l_random FROM dual CONNECT BY LEVEL <= 1e3;
  51.    -- method 1
  52.    l_ts_start := SYSTIMESTAMP;
  53.    FOR i IN 1 .. l_random.COUNT LOOP
  54.       l_converted := plXmlNumericEncoder(l_random(i));
  55.    END LOOP;
  56.    DBMS_OUTPUT.put_line('method 1:' || (SYSTIMESTAMP - l_ts_start));
  57.    -- method 2
  58.    l_ts_start := SYSTIMESTAMP;
  59.    FOR i IN 1 .. l_random.COUNT LOOP
  60.       l_converted := XmlNumericEncoder(l_random(i));
  61.    END LOOP;
  62.    DBMS_OUTPUT.put_line('method 2:' || (SYSTIMESTAMP - l_ts_start));
  63. END;
  64. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement