Advertisement
miguelmartins1987

My String Tools Package

Oct 19th, 2018
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.84 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE PkgStringTools IS
  2.   FUNCTION CharacterAt(str1 VARCHAR2, pos INTEGER) RETURN VARCHAR2;
  3.   FUNCTION Substring(str1 VARCHAR, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2;
  4.   FUNCTION Swap(str1 VARCHAR2, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2;
  5.   FUNCTION Shuffle(str1 VARCHAR2) RETURN VARCHAR2;
  6. END PkgStringTools;
  7. /
  8. CREATE OR REPLACE PACKAGE BODY PkgStringTools IS
  9.   FUNCTION CharacterAt(str1 VARCHAR2, pos INTEGER) RETURN VARCHAR2 IS
  10.   BEGIN
  11.     IF pos < 1 OR pos > LENGTH(str1) THEN
  12.       raise_application_error(-20000, 'Subscript out of range: ' || pos);
  13.     END IF;
  14.     RETURN SUBSTR(str1, pos, 1);
  15.   END;
  16.  
  17.   FUNCTION Substring(str1 VARCHAR, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2 IS
  18.   BEGIN
  19.     RETURN SUBSTR(str1, pos1, pos2 - pos1 + 1);
  20.   END;
  21.  
  22.   FUNCTION Swap(str1 VARCHAR2, pos1 INTEGER, pos2 INTEGER) RETURN VARCHAR2 IS
  23.     FIRST INTEGER := pos1;
  24.     SECOND INTEGER := pos2;
  25.     temp INTEGER;
  26.   BEGIN
  27.     IF FIRST = SECOND THEN
  28.       RETURN str1;
  29.     END IF;
  30.     IF FIRST > SECOND THEN
  31.       temp := SECOND;
  32.       FIRST := SECOND;
  33.       SECOND := temp;
  34.     END IF;
  35.     IF SECOND = LENGTH(str1) THEN
  36.       RETURN Substring(str1, 1, FIRST - 1) || CharacterAt(str1, SECOND) || Substring(str1, FIRST + 1, SECOND - 1) || CharacterAt(str1, FIRST);
  37.     ELSE
  38.       RETURN Substring(str1, 1, FIRST - 1) || CharacterAt(str1, SECOND) || Substring(str1, FIRST + 1, SECOND - 1) || CharacterAt(str1, FIRST) || Substring(str1, SECOND + 1, LENGTH(str1));
  39.     END IF;
  40.   END;
  41.  
  42.   FUNCTION Shuffle(str1 VARCHAR2) RETURN VARCHAR2 IS
  43.     shuffled VARCHAR2(32767) := str1;
  44.     VALUE NUMBER;
  45.   BEGIN
  46.     FOR i IN 1..LENGTH(shuffled)-1 LOOP
  47.       VALUE := ROUND(DBMS_RANDOM.VALUE(i, LENGTH(shuffled)-1));
  48.       shuffled := Swap(shuffled, i, VALUE);
  49.     END LOOP;
  50.     RETURN shuffled;
  51.   END;
  52. END PkgStringTools;
  53. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement