alexandria-plsql-utils/ora/random_util_pkg.pkb
2015-02-20 19:43:42 +01:00

845 lines
22 KiB
Plaintext
Executable File

create or replace package body random_util_pkg
as
/*
Purpose: Package handles generation of random values
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
type t_word_table is table of varchar2(2000) index by binary_integer;
function get_text_from_word_list (p_words in t_word_table,
p_min_length in number := null,
p_max_length in number := null,
p_separators in t_str_array := null) return varchar2
as
l_min_length number := nvl(p_min_length, 10);
l_max_length number := nvl(p_max_length, 255);
l_desired_length number;
l_returnvalue string_util_pkg.t_max_pl_varchar2;
begin
/*
Purpose: get random text
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_desired_length := get_integer (l_min_length, l_max_length);
l_returnvalue := p_words(get_integer(1,p_words.count));
while length(l_returnvalue) < l_desired_length loop
l_returnvalue := l_returnvalue || get_value(nvl(p_separators, t_str_array(' '))) || p_words(get_integer(1,p_words.count));
end loop;
l_returnvalue := substr(l_returnvalue, 1, l_max_length);
return l_returnvalue;
end get_text_from_word_list;
function get_integer (p_min_value in number := null,
p_max_value in number := null) return number
as
l_returnvalue number;
begin
/*
Purpose: get random integer
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_returnvalue := round(dbms_random.value(nvl(p_min_value,0),nvl(p_max_value,100)));
return l_returnvalue;
end get_integer;
function get_date (p_from_date in date := null,
p_to_date in date := null) return date
as
l_from_date date := coalesce (p_from_date, sysdate - 1000);
l_to_date date := coalesce (p_to_date, sysdate + 1000);
l_days_between number;
l_returnvalue date;
begin
/*
Purpose: get random date
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_days_between := round(l_to_date - l_from_date);
-- add a decimal number to get random time part of the date
l_returnvalue := l_from_date + get_amount (0, l_days_between);
return l_returnvalue;
end get_date;
function get_amount (p_min_value in number := null,
p_max_value in number := null) return number
as
l_returnvalue number;
begin
/*
Purpose: get a random amount (money)
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_returnvalue := round(dbms_random.value(nvl(p_min_value,-20000),nvl(p_max_value,100000)),2);
return l_returnvalue;
end get_amount;
function get_file_name (p_max_length in number := null,
p_file_type in varchar2 := null) return varchar2
as
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random file name
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words(1) := get_integer(1,9999);
l_words(2) := 'notes';
l_words(3) := 'vacation';
l_words(4) := 'tender';
l_words(5) := 'confirmation';
l_words(6) := 'manual';
l_words(7) := 'guide';
l_words(8) := 'worksheet';
l_words(9) := 'compliance';
l_words(10) := 'project';
l_words(11) := 'city';
l_words(12) := 'flight';
l_words(13) := 'transport';
l_words(14) := 'rockstar';
l_words(15) := 'recipe';
l_words(16) := 'traditional';
l_words(17) := 'form';
l_words(18) := 'template';
l_words(19) := 'design';
l_words(20) := 'comparison';
l_words(21) := get_integer(1,100);
l_words(22) := 'information';
l_words(23) := 'IMPORTANT';
l_words(24) := 'NICE';
l_words(25) := 'temp';
l_words(26) := 'draft ' || get_integer(1,10);
l_returnvalue := get_text_from_word_list (l_words, 1, nvl(p_max_length, 30), t_str_array('_', ' ', '-', ', '));
l_returnvalue := l_returnvalue || '.' || coalesce(p_file_type, get_file_type);
return l_returnvalue;
end get_file_name;
function get_file_type return varchar2
as
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random file type
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words(1) := 'txt';
l_words(2) := 'jpg';
l_words(3) := 'jpeg';
l_words(4) := 'gif';
l_words(5) := 'png';
l_words(6) := 'htm';
l_words(7) := 'html';
l_words(8) := 'xml';
l_words(9) := 'csv';
l_words(10) := 'doc';
l_words(11) := 'docx';
l_words(12) := 'xls';
l_words(13) := 'xlsx';
l_words(14) := 'ppt';
l_words(15) := 'pptx';
l_words(16) := 'js';
l_returnvalue := l_words(get_integer(1,l_words.count));
return l_returnvalue;
end get_file_type;
function get_mime_type return varchar2
as
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random mime type
Remarks: see http://www.iana.org/assignments/media-types/
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words(1) := 'text/plain';
l_words(2) := 'text/css';
l_words(3) := 'text/html';
l_words(4) := 'text/xml';
l_words(5) := 'application/pdf';
l_words(6) := 'application/json';
l_words(7) := 'application/xml';
l_words(8) := 'application/zip';
l_words(9) := 'audio/mpeg';
l_words(10) := 'image/gif';
l_words(11) := 'image/jpeg';
l_words(12) := 'image/png';
l_words(13) := 'multipart/form-data';
l_words(14) := 'video/mpeg';
l_returnvalue := l_words(get_integer(1,l_words.count));
return l_returnvalue;
end get_mime_type;
function get_person_name (p_gender in varchar2 := null) return varchar2
as
l_gender varchar2(30) := p_gender;
l_words0 t_word_table;
l_words1 t_word_table;
l_words2 t_word_table;
l_words3 t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get random person name
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words0(1) := 'male';
l_words0(2) := 'female';
l_words1(1) := 'Ali';
l_words1(2) := 'Lukas';
l_words1(3) := 'Noah';
l_words1(4) := 'Lois';
l_words1(5) := 'Arthur';
l_words1(6) := 'Ivan';
l_words1(7) := 'Lucas';
l_words1(8) := 'Hugo';
l_words1(9) := 'Lars';
l_words1(10) := 'Thomas';
l_words1(11) := 'Martin';
l_words1(12) := 'Paul';
l_words1(13) := 'Dimitrios';
l_words1(14) := 'Ricardo';
l_words1(15) := 'Tim';
l_words2(1) := 'Marie';
l_words2(2) := 'Hala';
l_words2(3) := 'Elena';
l_words2(4) := 'Charlotte';
l_words2(5) := 'Victoria';
l_words2(6) := 'Anna';
l_words2(7) := 'Tereza';
l_words2(8) := 'Heidi';
l_words2(9) := 'Rakel';
l_words2(10) := 'Emma';
l_words2(11) := 'Violeta';
l_words2(12) := 'Tatiana';
l_words2(13) := 'Daniela';
l_words2(14) := 'Julia';
l_words2(15) := 'Anastasia';
-- see http://en.wikipedia.org/wiki/Family_name
l_words3(1) := 'Smith';
l_words3(2) := 'Johnson';
l_words3(3) := 'Williams';
l_words3(4) := 'Garcia';
l_words3(5) := 'Martinez';
l_words3(6) := 'Young';
l_words3(7) := 'Hernandez';
l_words3(8) := 'Jordan';
l_words3(9) := 'Larsen';
l_words3(10) := 'Beach';
l_words3(11) := 'Vang';
l_words3(12) := 'Laurent';
l_words3(13) := 'Blanc';
l_words3(14) := 'Katz';
l_words3(15) := 'Kovazevic';
if l_gender is null then
l_gender := l_words0(get_integer(1,l_words0.count));
end if;
if l_gender = 'male' then
l_returnvalue := l_words1(get_integer(1,l_words1.count)) || ' ' || l_words3(get_integer(1,l_words3.count));
else
l_returnvalue := l_words2(get_integer(1,l_words2.count)) || ' ' || l_words3(get_integer(1,l_words3.count));
end if;
return l_returnvalue;
end get_person_name;
function get_email_address (p_mail_domains in t_str_array,
p_person_name in varchar2 := null) return varchar2
as
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get random email address
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_returnvalue := lower(replace(coalesce(p_person_name, get_person_name), ' ', '.')) || '@' || get_value (p_mail_domains);
return l_returnvalue;
end get_email_address;
function get_text (p_min_length in number := null,
p_max_length in number := null,
p_language in varchar2 := null) return varchar2
as
l_language varchar2(30) := nvl(p_language, 'latin');
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_pl_varchar2;
begin
/*
Purpose: get random text
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
if l_language = 'leet' then
l_words(1) := 'teh';
l_words(2) := 'pwned';
l_words(3) := 'leet';
l_words(4) := 'warez';
l_words(5) := 'haxor';
l_words(6) := 'j00';
l_words(7) := 'uber';
l_words(8) := 'w00t';
l_words(9) := 'skillz';
l_words(10) := 'n00b';
l_words(11) := 'pr0n';
l_words(12) := 'LOL';
l_words(13) := 'suxorz';
else
l_words(1) := 'lorem';
l_words(2) := 'ipsum';
l_words(3) := 'dolor';
l_words(4) := 'sit';
l_words(5) := 'amet';
l_words(6) := 'consectetur';
l_words(7) := 'adipiscing';
l_words(8) := 'elit';
l_words(9) := 'in';
l_words(10) := 'venenatis';
l_words(11) := 'facilisis';
l_words(12) := 'augue';
l_words(13) := 'sed';
l_words(14) := 'vehicula';
l_words(15) := 'vestibulum';
l_words(16) := 'gravida';
l_words(17) := 'justo';
l_words(18) := 'ac';
l_words(19) := 'justo';
l_words(20) := 'posuere';
l_words(21) := 'blandit';
l_words(22) := 'suspendisse';
l_words(23) := 'quis';
l_words(24) := 'dui';
l_words(25) := 'elit';
l_words(26) := 'vitae';
l_words(27) := 'luctus';
l_words(28) := 'mauris';
l_words(29) := 'ut';
l_words(30) := 'sit';
l_words(31) := 'amet';
l_words(32) := 'erat';
l_words(33) := 'sapien';
l_words(34) := 'integer';
l_words(35) := 'nec';
l_words(36) := 'lacus';
l_words(37) := 'nec';
l_words(38) := 'enim';
l_words(39) := 'facilisis';
l_words(40) := 'euismod';
l_words(41) := 'curabitur';
l_words(42) := 'porttitor';
l_words(43) := 'orci';
l_words(44) := 'at';
l_words(45) := 'massa';
l_words(46) := 'blandit';
l_words(47) := 'sit';
l_words(48) := 'amet';
l_words(49) := 'varius';
l_words(50) := 'diam';
end if;
l_returnvalue := get_text_from_word_list (l_words, p_min_length, p_max_length, t_str_array(' ', ', '));
return l_returnvalue;
end get_text;
function get_buzzword return varchar2
as
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get random buzzword
Remarks: see http://en.wikipedia.org/wiki/List_of_buzzwords
see http://programmers.stackexchange.com/questions/38505/most-overhyped-software-engineering-technologies-and-concepts-of-the-last-20-year
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words(1) := 'SOA';
l_words(2) := 'cloud';
l_words(3) := 'mobile';
l_words(4) := 'tablet';
l_words(5) := 'iPhone';
l_words(6) := 'web 2.0';
l_words(7) := 'Facebook';
l_words(8) := 'social media';
l_words(9) := 'NoSQL';
l_words(10) := 'agile';
l_words(11) := 'UML';
l_words(12) := 'Sharepoint';
l_words(13) := 'test driven design';
l_words(14) := 'Silverlight';
l_returnvalue := l_words(get_integer(1,l_words.count));
return l_returnvalue;
end get_buzzword;
function get_business_concept return varchar2
as
l_words1 t_word_table;
l_words2 t_word_table;
l_words3 t_word_table;
l_words4 t_word_table;
l_words5 t_word_table;
l_words6 t_word_table;
l_words7 t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get random business concept
Remarks: "Completely innovate stand-alone data rather than next-generation ideas." (!)
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words1(1) := 'seamlessly';
l_words1(2) := 'globally';
l_words1(3) := 'holistically';
l_words1(4) := 'assertively';
l_words1(5) := 'compellingly';
l_words1(6) := 'quickly';
l_words1(7) := 'authoritatively';
l_words1(8) := 'interactively';
l_words1(9) := 'enthusiastically';
l_words1(10) := 'appropriately';
l_words1(11) := 'completely';
l_words1(12) := 'credibly';
l_words1(13) := 'dynamically';
l_words1(14) := 'collaboratively';
l_words1(15) := 'synergistically';
l_words2(1) := 'empower';
l_words2(2) := 'scale';
l_words2(3) := 'harness';
l_words2(4) := 'evolve';
l_words2(5) := 'revolutionize';
l_words2(6) := 'restore';
l_words2(7) := 'leverage';
l_words2(8) := 'innovate';
l_words2(9) := 'e-enable';
l_words2(10) := 'maintain';
l_words2(11) := 'negotiate';
l_words2(12) := 'reconceptualize';
l_words2(13) := 'provide';
l_words2(14) := 'plagiarize';
l_words2(15) := 'reinvent';
l_words3(1) := 'dynamic';
l_words3(2) := 'front-end';
l_words3(3) := 'business';
l_words3(4) := 'extensible';
l_words3(5) := 'intensive';
l_words3(6) := 'robust';
l_words3(7) := 'web-enabled';
l_words3(8) := 'stand-alone';
l_words3(9) := 'scalable';
l_words3(10) := 'sticky';
l_words3(11) := 'worldwide';
l_words3(12) := 'B2B';
l_words3(13) := 'state-of-the-art';
l_words3(14) := 'cost-effective';
l_words3(15) := 'interdependent';
l_words4(1) := 'communities';
l_words4(2) := 'ideas';
l_words4(3) := 'data';
l_words4(4) := 'ROI';
l_words4(5) := 'human capital';
l_words4(6) := 'convergence';
l_words4(7) := 'products';
l_words4(8) := 'markets';
l_words4(9) := 'potentialities';
l_words4(10) := 'technology';
l_words4(11) := 'leadership';
l_words4(12) := 'focus areas';
l_words4(13) := 'content';
l_words4(14) := 'opportunities';
l_words4(15) := 'outside-the-box thinking';
l_words5(1) := 'with';
l_words5(2) := 'through';
l_words5(3) := 'via';
l_words5(4) := 'rather than';
l_words5(5) := 'without';
l_words5(6) := 'for';
l_words5(7) := 'before';
l_words5(8) := 'after';
l_words5(9) := 'and';
l_words5(10) := 'using';
l_words6(1) := 'clicks-and-mortar';
l_words6(2) := 'next-generation';
l_words6(3) := 'resource-maximizing';
l_words6(4) := 'end-to-end';
l_words6(5) := 'visionary';
l_words6(6) := 'intuitive';
l_words6(7) := 'e-business';
l_words6(8) := 'tactical';
l_words6(9) := 'strategic';
l_words6(10) := 'process-centric';
l_words6(11) := 'impactful';
l_words6(12) := 'client-based';
l_words6(13) := 'error-free';
l_words6(14) := 'magnetic';
l_words6(15) := 'timely';
l_words7(1) := 'testing procedures';
l_words7(2) := 'web services';
l_words7(3) := 'meta-services';
l_words7(4) := 'e-products';
l_words7(5) := 'portals';
l_words7(6) := 'sources';
l_words7(7) := 'expertise';
l_words7(8) := 'markets';
l_words7(9) := 'ideas';
l_words7(10) := 'innovation';
l_words7(11) := 'best practices';
l_words7(12) := 'architecture';
l_words7(13) := 'alignment';
l_words7(14) := 'benefits';
l_words7(15) := 'experiences';
l_returnvalue := initcap(l_words1(get_integer(1,l_words1.count))) || ' ' ||
l_words2(get_integer(1,l_words2.count)) || ' ' ||
l_words3(get_integer(1,l_words3.count)) || ' ' ||
l_words4(get_integer(1,l_words4.count)) || ' ' ||
l_words5(get_integer(1,l_words5.count)) || ' ' ||
l_words6(get_integer(1,l_words6.count)) || ' ' ||
l_words7(get_integer(1,l_words7.count)) || '.';
return l_returnvalue;
end get_business_concept;
function get_wait_message return varchar2
as
l_words1 t_word_table;
l_words2 t_word_table;
l_words3 t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random wait message
Remarks: see http://stackoverflow.com/questions/182112/what-are-some-funny-loading-statements-to-keep-users-amused
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words1(1) := 'recalibrating';
l_words1(2) := 'analyzing';
l_words1(3) := 'finalizing';
l_words1(4) := 'acquiring';
l_words1(5) := 'locking';
l_words1(6) := 'deciphering';
l_words1(7) := 'extracting';
l_words1(8) := 'binding';
l_words1(9) := 'loading';
l_words1(10) := 'preparing';
l_words2(1) := 'flux';
l_words2(2) := 'data';
l_words2(3) := 'spline';
l_words2(4) := 'storage';
l_words2(5) := 'plasma';
l_words2(6) := 'laser';
l_words2(7) := 'cache';
l_words2(8) := 'internal';
l_words2(9) := 'external';
l_words2(10) := 'relational';
l_words3(1) := 'capacitor';
l_words3(2) := 'conductor';
l_words3(3) := 'assembler';
l_words3(4) := 'disk';
l_words3(5) := 'detector';
l_words3(6) := 'post-processor';
l_words3(7) := 'pre-processor';
l_words3(8) := 'integrator';
l_words3(9) := 'grid';
l_words3(10) := 'area';
l_returnvalue := initcap(l_words1(get_integer(1,l_words1.count))) || ' ' ||
l_words2(get_integer(1,l_words2.count)) || ' ' ||
l_words3(get_integer(1,l_words3.count));
return l_returnvalue;
end get_wait_message;
function get_error_message return varchar2
as
l_words t_word_table;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random error message
Remarks: http://stackoverflow.com/questions/238079/funny-or-weird-error-messages-from-a-development-environment-application
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_words(1) := 'Catastrophic failure';
l_words(2) := '"null" is null or not an object';
l_words(3) := 'ORA-' || get_integer(10000,99999);
l_words(4) := 'Keyboard not found. Press F1 to continue.';
l_words(5) := 'The error message cannot be displayed';
l_words(6) := 'Unknown error';
l_words(7) := 'Runtime error ' || get_integer (-10, 100);
l_words(8) := 'Guru Meditation #' || get_integer (10000000);
l_words(9) := get_integer(500,599) || ' Internal Server Error';
l_words(10) := 'Unhandled exception in matrix$dll';
l_words(11) := 'Error: expected type (int, int, int) but got type (int, int, int).';
l_words(12) := 'Normal, successful completion.';
l_returnvalue := l_words(get_integer(1,l_words.count));
return l_returnvalue;
end get_error_message;
function get_value (p_values in t_str_array) return varchar2
as
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random value
Remarks:
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
l_returnvalue := p_values(get_integer(1,p_values.count));
return l_returnvalue;
end get_value;
function get_password (p_length in number := null) return varchar2
as
l_length number := nvl(p_length, 8);
l_char varchar2(1);
l_vowel boolean := false;
l_returnvalue string_util_pkg.t_max_db_varchar2;
begin
/*
Purpose: get a random password
Remarks: uses a combination of consonants and vowels which are easier to pronounce/remember than totally random passwords
Who Date Description
------ ---------- --------------------------------
MBR 22.01.2011 Created
*/
for i in 1 .. least(l_length,255) loop
if not l_vowel then
-- no C, X, Z, or Q, thanks!
l_char := get_value (t_str_array('b', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'y'));
l_returnvalue := l_returnvalue || l_char;
-- switch to vowel for next iteration
l_vowel := true;
else
l_char := get_value (t_str_array('a', 'e', 'i', 'o', 'u'));
l_returnvalue := l_returnvalue || l_char;
-- switch back to consonant
l_vowel := false;
end if;
end loop;
return l_returnvalue;
end get_password;
end random_util_pkg;
/