Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SET DEFINE OFF
- CREATE OR REPLACE AND compile JAVA source named XmlNumericEncoder AS
- PUBLIC class XmlNumericEncoder {
- PUBLIC static String encode(String xmlstring) {
- String xmlstring_out = "";
- FOR (int i = 0; i < xmlstring.LENGTH(); i++){
- CHAR ch = xmlstring.charAt(i);
- IF ((int)ch >= 192 && (int)ch <= 255){
- xmlstring_out += "&#" + (int)ch + ";";
- } ELSE {
- xmlstring_out += ch;
- }
- }
- RETURN xmlstring_out;
- }
- };
- /
- CREATE OR REPLACE FUNCTION XmlNumericEncoder(xmlstring VARCHAR2)
- RETURN String
- AS LANGUAGE JAVA
- NAME 'XmlNumericEncoder.encode(java.lang.String) return java.lang.String';
- /
- SELECT XmlNumericEncoder('Böhmer') FROM dual;
- SELECT XmlNumericEncoder('Böhmer') FROM dual;
- CREATE OR REPLACE FUNCTION plXmlNumericEncoder(xmlstring VARCHAR2) RETURN VARCHAR2 IS
- l_result LONG;
- l_char VARCHAR2(1);
- BEGIN
- FOR i IN 1 .. LENGTH(xmlstring) LOOP
- l_char := SUBSTR(xmlstring, i, 1);
- l_result := l_result
- || CASE WHEN ASCII(l_char) BETWEEN 192 AND 255 THEN '&#' || ASCII(l_char) || ';' ELSE l_char END;
- END LOOP;
- RETURN l_result;
- END;
- /
- SELECT plXmlNumericEncoder('Böhmer') FROM dual;
- SET SERVEROUTPUT ON
- DECLARE
- l_ts_start TIMESTAMP;
- TYPE tab_varchar2 IS TABLE OF VARCHAR2(2000) INDEX BY PLS_INTEGER;
- l_random tab_varchar2;
- l_converted LONG;
- BEGIN
- SELECT DBMS_RANDOM.STRING('p', 2000) BULK COLLECT INTO l_random FROM dual CONNECT BY LEVEL <= 1e3;
- -- method 1
- l_ts_start := SYSTIMESTAMP;
- FOR i IN 1 .. l_random.COUNT LOOP
- l_converted := plXmlNumericEncoder(l_random(i));
- END LOOP;
- DBMS_OUTPUT.put_line('method 1:' || (SYSTIMESTAMP - l_ts_start));
- -- method 2
- l_ts_start := SYSTIMESTAMP;
- FOR i IN 1 .. l_random.COUNT LOOP
- l_converted := XmlNumericEncoder(l_random(i));
- END LOOP;
- DBMS_OUTPUT.put_line('method 2:' || (SYSTIMESTAMP - l_ts_start));
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement