Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PACKAGE PkgStringTools IS
- FUNCTION CharacterAt(str1 VARCHAR2, pos INTEGER) RETURN VARCHAR2;
- FUNCTION Substring(str1 VARCHAR, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2;
- FUNCTION Swap(str1 VARCHAR2, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2;
- FUNCTION Shuffle(str1 VARCHAR2) RETURN VARCHAR2;
- END PkgStringTools;
- /
- CREATE OR REPLACE PACKAGE BODY PkgStringTools IS
- FUNCTION CharacterAt(str1 VARCHAR2, pos INTEGER) RETURN VARCHAR2 IS
- BEGIN
- IF pos < 1 OR pos > LENGTH(str1) THEN
- raise_application_error(-20000, 'Subscript out of range: ' || pos);
- END IF;
- RETURN SUBSTR(str1, pos, 1);
- END;
- FUNCTION Substring(str1 VARCHAR, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2 IS
- BEGIN
- RETURN SUBSTR(str1, pos1, pos2 - pos1 + 1);
- END;
- FUNCTION Swap(str1 VARCHAR2, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2 IS
- FIRST INTEGER := pos1;
- SECOND INTEGER := pos2;
- temp INTEGER;
- BEGIN
- IF FIRST = SECOND THEN
- RETURN str1;
- END IF;
- IF FIRST > SECOND THEN
- temp := SECOND;
- FIRST := SECOND;
- SECOND := temp;
- END IF;
- IF SECOND = LENGTH(str1) THEN
- RETURN Substring(str1, 1, FIRST - 1) || CharacterAt(str1, SECOND) || Substring(str1, FIRST + 1, SECOND - 1) || CharacterAt(str1, FIRST);
- ELSE
- RETURN Substring(str1, 1, FIRST - 1) || CharacterAt(str1, SECOND) || Substring(str1, FIRST + 1, SECOND - 1) || CharacterAt(str1, FIRST) || Substring(str1, SECOND + 1, LENGTH(str1));
- END IF;
- END;
- FUNCTION Shuffle(str1 VARCHAR2) RETURN VARCHAR2 IS
- shuffled VARCHAR2(32767) := str1;
- VALUE NUMBER;
- BEGIN
- FOR i IN 1..LENGTH(shuffled)-1 LOOP
- VALUE := ROUND(DBMS_RANDOM.VALUE(i, LENGTH(shuffled)-1));
- shuffled := Swap(shuffled, i, VALUE);
- END LOOP;
- RETURN shuffled;
- END;
- END PkgStringTools;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement