diff --git a/package.json b/package.json
index 812e6fd..58cb952 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,12 @@
"build": "node src/build.js",
"postbuild": "echo exit | sqlplus -S /@playground @plex_install.sql",
"watch": "chokidar src/PLEX.pks src/PLEX.pkb src/plex_install.sql --initial -c \"npm run build\"",
- "test-ccflags": "cd test && echo exit | sqlplus -S /@playground @test_ccflags.sql && cd ..",
- "test-export": "cd test && echo exit | sqlplus -S /@playground @test_export.sql && cd ..",
- "test-types-table": "cd test && echo exit | sqlplus -S /@playground @test_types_1_table.sql && cd ..",
- "test-types-data": "cd test && echo exit | sqlplus -S /@playground @test_types_2_data.sql 1 && cd ..",
- "test-types-export": "cd test && echo exit | sqlplus -S /@playground @test_types_3_export.sql && cd ..",
- "test-types-import": "cd test && echo exit | sqlplus -S /@playground @test_types_4_import.sql && cd .."
+ "test-ccflags": "cd test && echo exit | sqlplus -S /@playground @test_ccflags.sql && cd ..",
+ "test-export": "cd test && echo exit | sqlplus -S /@playground @test_export.sql && cd ..",
+ "test-types-table": "cd test && echo exit | sqlplus -S /@playground @test_types_1_table.sql && cd ..",
+ "test-types-data": "cd test && echo exit | sqlplus -S /@playground @test_types_2_data.sql 100 && cd ..",
+ "test-types-export": "cd test && echo exit | sqlplus -S /@playground @test_types_3_export.sql && cd ..",
+ "test-types-import": "cd test && echo exit | sqlplus -S /@playground @test_types_4_import.sql && cd .."
},
"devDependencies": {
"chokidar-cli": "^2.1.0",
diff --git a/plex_install.sql b/plex_install.sql
index 913238f..0638baf 100644
--- a/plex_install.sql
+++ b/plex_install.sql
@@ -1587,8 +1587,8 @@ IS
v_nls_date_format VARCHAR2(30);
v_nls_timestamp_format VARCHAR2(30);
v_nls_timestamp_tz_format VARCHAR2(30);
- c_sqlplus_max_line_length CONSTANT PLS_INTEGER := 4500;
- v_line_cache VARCHAR2(4998 CHAR);
+ c_sqlplus_max_line_length CONSTANT PLS_INTEGER := 2400;
+ v_line_cache VARCHAR2(2498 CHAR);
v_line_size PLS_INTEGER := 0;
v_buffer_varchar2 VARCHAR2(32767 CHAR);
v_buffer_clob CLOB;
@@ -1633,46 +1633,28 @@ IS
FUNCTION quote_string (p_string VARCHAR2) RETURN VARCHAR2 IS
v_string varchar2(5000 char);
BEGIN
- if instr(p_string, '''') = 0 then
- v_string := '''' || p_string || '''';
- --
- elsif instr(p_string, '^''') = 0 then
- v_string := 'q''^' || p_string || '^''';
- --
- elsif instr(p_string, '`''') = 0 then
- v_string := 'q''`' || p_string || '`''';
- --
- elsif instr(p_string, '#''') = 0 then
- v_string := 'q''#' || p_string || '#''';
- --
- elsif instr(p_string, '|''') = 0 then
- v_string := 'q''|' || p_string || '|''';
- --
- elsif instr(p_string, '!''') = 0 then
- v_string := 'q''!' || p_string || '!''';
- --
- elsif instr(p_string, '}''') = 0 then
- v_string := 'q''{' || p_string || '}''';
- --
- elsif instr(p_string, ']''') = 0 then
- v_string := 'q''[' || p_string || ']''';
- --
- elsif instr(p_string, '>''') = 0 then
- v_string := 'q''<' || p_string || '>''';
- --
- elsif instr(p_string, ')''') = 0 then
- v_string := 'q''(' || p_string || ')''';
+ case
+ when instr(p_string, '''') = 0 then v_string := '''' || p_string || '''';
+ when instr(p_string, '^''') = 0 then v_string := 'q''^' || p_string || '^''';
+ when instr(p_string, '`''') = 0 then v_string := 'q''`' || p_string || '`''';
+ when instr(p_string, '#''') = 0 then v_string := 'q''#' || p_string || '#''';
+ when instr(p_string, '|''') = 0 then v_string := 'q''|' || p_string || '|''';
+ when instr(p_string, '!''') = 0 then v_string := 'q''!' || p_string || '!''';
+ when instr(p_string, '}''') = 0 then v_string := 'q''{' || p_string || '}''';
+ when instr(p_string, ']''') = 0 then v_string := 'q''[' || p_string || ']''';
+ when instr(p_string, '>''') = 0 then v_string := 'q''<' || p_string || '>''';
+ when instr(p_string, ')''') = 0 then v_string := 'q''(' || p_string || ')''';
else
v_string := '''' || replace(p_string, '''', '''''') || '''';
- end if;
+ end case;
-- SQL*Plus specific:
-- SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer
-- (Doc ID 2377701.1, https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1)
- if instr(v_string, ';'||chr(10)) = 0 then
+ if regexp_instr(v_string,';$',1,1,0,'m') = 0 then
return v_string;
else
- return ('replace(' || replace(v_string, ';'||chr(10), ';!'||chr(10)) || ','';!''||chr(10),'';''||chr(10))');
+ return ('regexp_replace(' || regexp_replace(v_string, ';$',';!',1,0,'m') || ','';!$'','';'',1,0,''m'')');
end if;
END quote_string;
@@ -1715,7 +1697,7 @@ IS
else
v_offset := 1;
while v_offset <= v_length loop
- line_append(quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)));
+ line_append(case when v_offset != 1 then '|| ' end || quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)));
v_offset := v_offset + c_sqlplus_max_line_length;
end loop;
end if;
@@ -1731,9 +1713,8 @@ IS
end loop;
line_append (')');
end if;
- ELSE
- line_append('ERROR: wrong p_type given for process_varchar2_buffer - allowed values are NUMBER, STRING, RAW.');
END CASE;
+ v_buffer_varchar2 := null;
END IF;
END process_varchar2_buffer;
@@ -1741,14 +1722,14 @@ IS
PROCEDURE process_clob_buffer IS
v_length pls_integer;
- v_offset pls_integer := 1;
+ v_offset pls_integer;
BEGIN
v_length := nvl(length(v_buffer_clob), 0);
if v_length = 0 then
line_append('NULL');
else
if v_length <= c_sqlplus_max_line_length then
- line_append('to_clob(' || quote_string(substr(v_buffer_clob, 1, c_sqlplus_max_line_length)) || ')');
+ line_append(quote_string(substr(v_buffer_clob, 1, c_sqlplus_max_line_length)));
else
v_offset := 1;
while v_offset <= v_length loop
@@ -1756,6 +1737,7 @@ IS
v_offset := v_offset + c_sqlplus_max_line_length;
end loop;
end if;
+ v_buffer_clob := null;
end if;
END process_clob_buffer;
@@ -1886,6 +1868,10 @@ IS
v_buffer_varchar2 := null;
end if;
process_varchar2_buffer('STRING');
+ ELSIF v_desc_tab(i).col_type = c_xmltype THEN
+ dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);
+ v_buffer_varchar2 := regexp_replace(v_buffer_varchar2, '\s*$', null);
+ process_varchar2_buffer('STRING');
ELSE
dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);
IF v_desc_tab(i).col_type IN (c_number, c_binary_float, c_binary_double) THEN
@@ -1933,11 +1919,13 @@ IS
BEGIN
IF p_table_name IS NOT NULL THEN
+ --dbms_lob.createtemporary(v_buffer_clob, true);
set_session_nls_params;
parse_query_and_describe_columns;
create_data;
create_footer;
recover_session_nls_params;
+ --dbms_lob.freetemporary(v_buffer_clob);
END IF;
END util_clob_table_to_insert;
diff --git a/src/PLEX.pkb b/src/PLEX.pkb
index b33b3e7..cdc9eb9 100644
--- a/src/PLEX.pkb
+++ b/src/PLEX.pkb
@@ -946,8 +946,8 @@ IS
v_nls_date_format VARCHAR2(30);
v_nls_timestamp_format VARCHAR2(30);
v_nls_timestamp_tz_format VARCHAR2(30);
- c_sqlplus_max_line_length CONSTANT PLS_INTEGER := 4500;
- v_line_cache VARCHAR2(4998 CHAR);
+ c_sqlplus_max_line_length CONSTANT PLS_INTEGER := 2400;
+ v_line_cache VARCHAR2(2498 CHAR);
v_line_size PLS_INTEGER := 0;
v_buffer_varchar2 VARCHAR2(32767 CHAR);
v_buffer_clob CLOB;
@@ -992,46 +992,28 @@ IS
FUNCTION quote_string (p_string VARCHAR2) RETURN VARCHAR2 IS
v_string varchar2(5000 char);
BEGIN
- if instr(p_string, '''') = 0 then
- v_string := '''' || p_string || '''';
- --
- elsif instr(p_string, '^''') = 0 then
- v_string := 'q''^' || p_string || '^''';
- --
- elsif instr(p_string, '`''') = 0 then
- v_string := 'q''`' || p_string || '`''';
- --
- elsif instr(p_string, '#''') = 0 then
- v_string := 'q''#' || p_string || '#''';
- --
- elsif instr(p_string, '|''') = 0 then
- v_string := 'q''|' || p_string || '|''';
- --
- elsif instr(p_string, '!''') = 0 then
- v_string := 'q''!' || p_string || '!''';
- --
- elsif instr(p_string, '}''') = 0 then
- v_string := 'q''{' || p_string || '}''';
- --
- elsif instr(p_string, ']''') = 0 then
- v_string := 'q''[' || p_string || ']''';
- --
- elsif instr(p_string, '>''') = 0 then
- v_string := 'q''<' || p_string || '>''';
- --
- elsif instr(p_string, ')''') = 0 then
- v_string := 'q''(' || p_string || ')''';
+ case
+ when instr(p_string, '''') = 0 then v_string := '''' || p_string || '''';
+ when instr(p_string, '^''') = 0 then v_string := 'q''^' || p_string || '^''';
+ when instr(p_string, '`''') = 0 then v_string := 'q''`' || p_string || '`''';
+ when instr(p_string, '#''') = 0 then v_string := 'q''#' || p_string || '#''';
+ when instr(p_string, '|''') = 0 then v_string := 'q''|' || p_string || '|''';
+ when instr(p_string, '!''') = 0 then v_string := 'q''!' || p_string || '!''';
+ when instr(p_string, '}''') = 0 then v_string := 'q''{' || p_string || '}''';
+ when instr(p_string, ']''') = 0 then v_string := 'q''[' || p_string || ']''';
+ when instr(p_string, '>''') = 0 then v_string := 'q''<' || p_string || '>''';
+ when instr(p_string, ')''') = 0 then v_string := 'q''(' || p_string || ')''';
else
v_string := '''' || replace(p_string, '''', '''''') || '''';
- end if;
+ end case;
-- SQL*Plus specific:
-- SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer
-- (Doc ID 2377701.1, https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1)
- if instr(v_string, ';'||chr(10)) = 0 then
+ if regexp_instr(v_string,';$',1,1,0,'m') = 0 then
return v_string;
else
- return ('replace(' || replace(v_string, ';'||chr(10), ';!'||chr(10)) || ','';!''||chr(10),'';''||chr(10))');
+ return ('regexp_replace(' || regexp_replace(v_string, ';$',';!',1,0,'m') || ','';!$'','';'',1,0,''m'')');
end if;
END quote_string;
@@ -1074,7 +1056,7 @@ IS
else
v_offset := 1;
while v_offset <= v_length loop
- line_append(quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)));
+ line_append(case when v_offset != 1 then '|| ' end || quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)));
v_offset := v_offset + c_sqlplus_max_line_length;
end loop;
end if;
@@ -1090,9 +1072,8 @@ IS
end loop;
line_append (')');
end if;
- ELSE
- line_append('ERROR: wrong p_type given for process_varchar2_buffer - allowed values are NUMBER, STRING, RAW.');
END CASE;
+ v_buffer_varchar2 := null;
END IF;
END process_varchar2_buffer;
@@ -1100,14 +1081,14 @@ IS
PROCEDURE process_clob_buffer IS
v_length pls_integer;
- v_offset pls_integer := 1;
+ v_offset pls_integer;
BEGIN
v_length := nvl(length(v_buffer_clob), 0);
if v_length = 0 then
line_append('NULL');
else
if v_length <= c_sqlplus_max_line_length then
- line_append('to_clob(' || quote_string(substr(v_buffer_clob, 1, c_sqlplus_max_line_length)) || ')');
+ line_append(quote_string(substr(v_buffer_clob, 1, c_sqlplus_max_line_length)));
else
v_offset := 1;
while v_offset <= v_length loop
@@ -1115,6 +1096,7 @@ IS
v_offset := v_offset + c_sqlplus_max_line_length;
end loop;
end if;
+ v_buffer_clob := null;
end if;
END process_clob_buffer;
@@ -1245,6 +1227,10 @@ IS
v_buffer_varchar2 := null;
end if;
process_varchar2_buffer('STRING');
+ ELSIF v_desc_tab(i).col_type = c_xmltype THEN
+ dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);
+ v_buffer_varchar2 := regexp_replace(v_buffer_varchar2, '\s*$', null);
+ process_varchar2_buffer('STRING');
ELSE
dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);
IF v_desc_tab(i).col_type IN (c_number, c_binary_float, c_binary_double) THEN
@@ -1292,11 +1278,13 @@ IS
BEGIN
IF p_table_name IS NOT NULL THEN
+ --dbms_lob.createtemporary(v_buffer_clob, true);
set_session_nls_params;
parse_query_and_describe_columns;
create_data;
create_footer;
recover_session_nls_params;
+ --dbms_lob.freetemporary(v_buffer_clob);
END IF;
END util_clob_table_to_insert;
diff --git a/test/test_types_3_export.sql b/test/test_types_3_export.sql
index 6165c12..276a3c4 100644
--- a/test/test_types_3_export.sql
+++ b/test/test_types_3_export.sql
@@ -1,5 +1,5 @@
timing start test_export
-set verify off feedback off heading off
+set verify off feedback off heading off serveroutput on
set trimout on trimspool on pagesize 0 linesize 5000 long 100000000 longchunksize 32767
whenever sqlerror exit sql.sqlcode rollback
whenever oserror continue
diff --git a/test/test_types_4_import.sql b/test/test_types_4_import.sql
index 0b6d926..f3d6d57 100644
--- a/test/test_types_4_import.sql
+++ b/test/test_types_4_import.sql
@@ -1,7 +1,7 @@
prompt Truncate table plex_test_multiple_datatypes
TRUNCATE TABLE plex_test_multiple_datatypes;
--- Script generated by PLEX version 2.2.0.5 - more infos here: https://github.com/ogobrecht/plex
+-- Script generated by PLEX version 2.2.0.6 - more infos here: https://github.com/ogobrecht/plex
-- Performance Hacks by Connor McDonald: https://connor-mcdonald.com/2019/05/17/hacking-together-faster-inserts/
-- For strange line end replacements a big thank to SQL*Plus: https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1 (SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer)
prompt Insert into PLEX_TEST_MULTIPLE_DATATYPES
@@ -13,2981 +13,101 @@ alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
alter session set nls_timestamp_format = 'yyyy-mm-dd hh24:mi:ssxff';
alter session set nls_timestamp_tz_format = 'yyyy-mm-dd hh24:mi:ssxff tzr';
insert all
-into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15805,'bTKKU','X',101306612458,219575132046,6755666.50424,742540096250831.32915,588000843352722117732775.671111062786,704708092600000000000000,'Dummy XML for API method get_a_row: uCzlqpJfLvkiQveyDgoRwNXUYUyDpSUWRmLBauPAMLCbGyxblAAisIQTWypfIdCcivkrpuzQsrtCMVvKUzmialpokAhiXRc
-',
-to_clob(replace(q'^CREATE OR REPLACE PACKAGE BODY plex IS
-
---------------------------------------------------------------------------------------------------------------------------------
--- CONSTANTS, TYPES, GLOBALS
---------------------------------------------------------------------------------------------------------------------------------
-
-c_tab CONSTANT VARCHAR2(1) := chr(9);!
-c_cr CONSTANT VARCHAR2(1) := chr(13);!
-c_lf CONSTANT VARCHAR2(1) := chr(10);!
-c_crlf CONSTANT VARCHAR2(2) := chr(13) || chr(10);!
-c_space_crlf CONSTANT VARCHAR2(3) := ' ' || chr(13) || chr(10);!
-c_at CONSTANT VARCHAR2(1) := '@';!
-c_hash CONSTANT VARCHAR2(1) := '#';!
-c_slash CONSTANT VARCHAR2(1) := '/';!
-c_vc2_max_size CONSTANT PLS_INTEGER := 32767;!
-c_zip_local_file_header CONSTANT RAW(4) := hextoraw('504B0304');!
-c_zip_end_of_central_directory CONSTANT RAW(4) := hextoraw('504B0506');!
--- numeric type identfiers
-c_number CONSTANT PLS_INTEGER := 2; -- FLOAT
-c_binary_float CONSTANT PLS_INTEGER := 100;!
-c_binary_double CONSTANT PLS_INTEGER := 101;!
--- string type identfiers
-c_char CONSTANT PLS_INTEGER := 96; -- NCHAR
-c_varchar2 CONSTANT PLS_INTEGER := 1; -- NVARCHAR2
-c_long CONSTANT PLS_INTEGER := 8;!
-c_clob CONSTANT PLS_INTEGER := 112; -- NCLOB
-c_xmltype CONSTANT PLS_INTEGER := 109; -- ANYDATA, ANYDATASET, ANYTYPE, Object type, VARRAY, Nested table
-c_rowid CONSTANT PLS_INTEGER := 69;!
-c_urowid CONSTANT PLS_INTEGER := 208;!
--- binary type identfiers
-c_raw CONSTANT PLS_INTEGER := 23;!
-c_long_raw CONSTANT PLS_INTEGER := 24;!
-c_blob CONSTANT PLS_INTEGER := 113;!
-c_bfile CONSTANT PLS_INTEGER := 114;!
--- date type identfiers
-c_date CONSTANT PLS_INTEGER := 12;!
-c_timestamp CONSTANT PLS_INTEGER := 180;!
-c_timestamp_tz CONSTANT PLS_INTEGER := 181;!
-c_timestamp_ltz CONSTANT PLS_INTEGER := 231;!
--- interval type identfiers
-c_interval_year_to_month CONSTANT PLS_INTEGER := 182;!
-c_interval_day_to_second CONSTANT PLS_INTEGER := 183;!
--- cursor type identfiers
-c_ref CONSTANT PLS_INTEGER := 111;!
-c_ref_cursor CONSTANT PLS_INTEGER := 102; -- same identfiers for strong and weak ref cursor
-
-TYPE tab_errlog IS TABLE OF rec_error_log INDEX BY BINARY_INTEGER;!
-
-TYPE rec_runlog_step IS RECORD (
- action app_info_text,
- start_time TIMESTAMP(6),
- stop_time TIMESTAMP(6),
- elapsed NUMBER,
- execution NUMBER);!
-TYPE tab_runlog_step IS TABLE OF rec_runlog_step INDEX BY BINARY_INTEGER;!
-
-TYPE rec_runlog IS RECORD (
- module app_info_text,
- start_time TIMESTAMP(6),
- stop_time TIMESTAMP(6),
- run_time NUMBER,
- measured_time NUMBER,
- unmeasured_time NUMBER,
- data tab_runlog_step);!
-TYPE rec_queries IS RECORD (--
- query VARCHAR2(32767 CHAR),
- file_name VARCHAR2(256 CHAR),
- max_rows NUMBER DEFAULT 100000);!
-TYPE tab_queries IS TABLE OF rec_queries INDEX BY BINARY_INTEGER;!
-
-TYPE tab_file_list_lookup IS TABLE OF PLS_INTEGER INDEX BY VARCHAR2(256);!
-
-TYPE rec_ddl_files IS RECORD (
- ords_modules_ tab_vc1k,
- sequences_ tab_vc1k,
- tables_ tab_vc1k,
- ref_constraints_ tab_vc1k,
- indices_ tab_vc1k,
- views_ tab_vc1k,
- mviews_ tab_vc1k,
- types_ tab_vc1k,
- type_bodies_ tab_vc1k,
- triggers_ tab_vc1k,
- functions_ tab_vc1k,
- procedures_ tab_vc1k,
- packages_ tab_vc1k,
- package_bodies_ tab_vc1k,
- grants_ tab_vc1k,
- other_objects_ tab_vc1k);!
-
-g_clob CLOB;!
-g_cache VARCHAR2(32767char);!
-g_errlog tab_errlog;!
-g_runlog rec_runlog;!
-g_queries tab_queries;!
-
-
-
---------------------------------------------------------------------------------------------------------------------------------
--- UTILITIES (forward declarations, only compiled when not public)
---------------------------------------------------------------------------------------------------------------------------------
-
-$if not $$utils_public $then
-FUNCTION util_b^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^ool_to_string (p_bool IN BOOLEAN) RETURN VARCHAR2;!
-
-FUNCTION util_string_to_bool (
- p_bool_string IN VARCHAR2,
- p_default IN BOOLEAN)
-RETURN BOOLEAN;!
-
-FUNCTION util_split (
- p_string IN VARCHAR2,
- p_delimiter IN VARCHAR2 DEFAULT ',')
-RETURN tab_vc32k;!
-
-FUNCTION util_join (
- p_array IN tab_vc32k,
- p_delimiter IN VARCHAR2 DEFAULT ',')
-RETURN VARCHAR2;!
-
-FUNCTION util_clob_to_blob (p_clob CLOB) RETURN BLOB;!
-
-/*
-ZIP UTILS
-- The following four zip utilities are copied from this article:
- - Blog: https://technology.amis.nl/2010/03/13/utl_compress-gzip-and-zlib/
- - Source: https://technology.amis.nl/wp-content/uploads/2010/06/as_zip10.txt
-- Copyright (c) 2010, 2011 by Anton Scheffer (MIT license)
-- Thank you for sharing this Anton :-)
-*/
-FUNCTION util_zip_blob_to_num (
- p_blob IN BLOB,
- p_len IN INTEGER,
- p_pos IN INTEGER)
-RETURN NUMBER;!
-
-FUNCTION util_zip_little_endian (
- p_big IN NUMBER,
- p_bytes IN PLS_INTEGER := 4)
-RETURN RAW;!
-
-PROCEDURE util_zip_add_file (
- p_zipped_blob IN OUT BLOB,
- p_name IN VARCHAR2,
- p_content IN BLOB);!
-
-PROCEDURE util_zip_finish (p_zipped_blob IN OUT BLOB);!
-
-FUNCTION util_multi_replace (
- p_source_string VARCHAR2,
- p_01_find VARCHAR2 DEFAULT NULL, p_01_replace VARCHAR2 DEFAULT NULL,
- p_02_find VARCHAR2 DEFAULT NULL, p_02_replace VARCHAR2 DEFAULT NULL,
- p_03_find VARCHAR2 DEFAULT NULL, p_03_replace VARCHAR2 DEFAULT NULL,
- p_04_find VARCHAR2 DEFAULT NULL, p_04_replace VARCHAR2 DEFAULT NULL,
- p_05_find VARCHAR2 DEFAULT NULL, p_05_replace VARCHAR2 DEFAULT NULL,
- p_06_find VARCHAR2 DEFAULT NULL, p_06_replace VARCHAR2 DEFAULT NULL,
- p_07_find VARCHAR2 DEFAULT NULL, p_07_replace VARCHAR2 DEFAULT NULL,
- p_08_find VARCHAR2 DEFAULT NULL, p_08_replace VARCHAR2 DEFAULT NULL,
- p_09_find VARCHAR2 DEFAULT NULL, p_09_replace VARCHAR2 DEFAULT NULL,
- p_10_find VARCHAR2 DEFAULT NULL, p_10_replace VARCHAR2 DEFAULT NULL,
- p_11_find VARCHAR2 DEFAULT NULL, p_11_replace VARCHAR2 DEFAULT NULL,
- p_12_find VARCHAR2 DEFAULT NULL, p_12_replace VARCHAR2 DEFAULT NULL)
-RETURN VARCHAR2;!
-
-FUNCTION util_set_build_status_run_only (p_app_export_sql IN CLOB) RETURN CLOB;!
-
-FUNCTION util_calc_data_timestamp (p_as_of_minutes_ago IN NUMBER) RETURN TIMESTAMP;!
-
-PROCEDURE util_setup_dbms_metadata (
- p_pretty IN BOOLEAN DEFAULT true,
- p_constraints IN BOOLEAN DEFAULT true,
- p_ref_constraints IN BOOLEAN DEFAULT false,
- p_partitioning IN BOOLEAN DEFAULT true,
- p_tablespace IN BOOLEAN DEFAULT false,
- p_storage IN BOOLEAN DEFAULT false,
- p_segment_attributes IN BOOLEAN DEFAULT false,
- p_sqlterminator IN BOOLEAN DEFAULT true,
- p_constraints_as_alter IN BOOLEAN DEFAULT false,
- p_emit_schema IN BOOLEAN DEFAULT false);!
-
-FUNCTION util_to_xlsx_datetime (
- p_date IN DATE)
-RETURN NUMBER;!
-
---------------------------------------------------------------------------------------------------------------------------------
--- The following tools are working on the global private package variables g_clob, g_clob_varchar_cache, g_runlog and g_queries
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_append (p_content IN VARCHAR2);!
-
-PROCEDURE util_clob_append (p_content IN CLOB);!
-
-PROCEDURE util_clob_flush_cache;!
-
-PROCEDURE util_clob_add_to_export_files (
- p_export_files IN OUT NOCOPY tab_export_files,
- p_name IN VARCHAR2);!
-
-PROCEDURE util_clob_query_to_csv (
- p_query IN VARCHAR2,
- p_max_rows IN NUMBER DEFAULT 1000,
- p_delimiter IN VARCHAR2 DEFAULT ',',
- p_quote_mark IN VARCHAR2 DEFAULT '"',
- p_header_prefix IN VARCHAR2 DEFAULT NULL);!
-
-PROCEDURE util_clob_table_to_insert (
- p_table_name IN VARCHAR2,
- p_data_scn IN NUMBER,
- p_max_rows IN NUMBER DEFAULT 1000,
- p_insert_all_size IN NUMBER DEFAULT 10);!
-
-PROCEDURE util_clob_create_runtime_log (p_export_files IN OUT NOCOPY tab_export_files);!
-
-PROCEDURE util_clob_create_error_log (p_export_files IN OUT NOCOPY tab_export_files);!
-
-PROCEDURE util_ensure_unique_file_names (p_export_files IN OUT NOCOPY tab_export_files);!
-
-PROCEDURE util_log_init (p_module IN VARCHAR2);!
-
-PROCEDURE util_log_start (p_action IN VARCHAR2);!
-
-PROCEDURE util_log_error (p_name VARCHAR2);!
-
-PROCEDURE util_log_stop;!
-
-FUNCTION util_log_get_runtime (
- p_start IN TIMESTAMP,
- p_stop IN TIMESTAMP)
-RETURN NUMBER;!
-
-PROCEDURE util_log_calc_runtimes;!
-
-$end
-
-
-
-^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^--------------------------------------------------------------------------------------------------------------------------------
--- UTILITIES MAIN CODE
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_bool_to_string (p_bool IN BOOLEAN) RETURN VARCHAR2 IS
-BEGIN
- RETURN CASE WHEN p_bool THEN 'TRUE' ELSE 'FALSE' END;!
-END util_bool_to_string;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_string_to_bool (
- p_bool_string IN VARCHAR2,
- p_default IN BOOLEAN)
-RETURN BOOLEAN IS
- v_bool_string VARCHAR2(1 CHAR);!
- v_return BOOLEAN;!
-BEGIN
- v_bool_string := upper(substr(p_bool_string, 1, 1));!
- v_return :=
- CASE
- WHEN v_bool_string IN ('1', 'Y', 'T') THEN
- true
- WHEN v_bool_string IN ('0', 'N', 'F') THEN
- false
- ELSE p_default
- END;!
- RETURN v_return;!
-END util_string_to_bool;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_split (
- p_string IN VARCHAR2,
- p_delimiter IN VARCHAR2 DEFAULT ',')
-RETURN tab_vc32k IS
- v_return tab_vc32k := tab_vc32k();!
- v_offset PLS_INTEGER := 1;!
- v_index PLS_INTEGER := instr(p_string, p_delimiter, v_offset);!
- v_delimiter_length PLS_INTEGER := length(p_delimiter);!
- v_string_length CONSTANT PLS_INTEGER := length(p_string);!
- v_count PLS_INTEGER := 1;!
-
- PROCEDURE add_value (p_value VARCHAR2) IS
- BEGIN
- v_return.extend;!
- v_return(v_count) := p_value;!
- v_count := v_count + 1;!
- END add_value;!
-
-BEGIN
- WHILE v_index > 0 LOOP
- add_value(trim(substr(p_string, v_offset, v_index - v_offset)));!
- v_offset := v_index + v_delimiter_length;!
- v_index := instr(p_string, p_delimiter, v_offset);!
- END LOOP;!
- IF v_string_length - v_offset + 1 > 0 THEN
- add_value(trim(substr(p_string, v_offset, v_string_length - v_offset + 1)));!
- END IF;!
- RETURN v_return;!
-END util_split;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_join (
- p_array IN tab_vc32k,
- p_delimiter IN VARCHAR2 DEFAULT ',')
-RETURN VARCHAR2 IS
- v_return VARCHAR2(32767);!
-BEGIN
- IF p_array IS NOT NULL AND p_array.count > 0 THEN
- v_return := p_array(1);!
- FOR i IN 2 ..p_array.count LOOP
- v_return := v_return || p_delimiter || p_array(i);!
- END LOOP;!
- END IF;!
- RETURN v_return;!
-EXCEPTION
- WHEN value_error THEN
- RETURN v_return;!
-END util_join;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_clob_to_blob (p_clob CLOB) RETURN BLOB IS
- v_blob BLOB;!
- v_lang_context INTEGER := dbms_lob.default_lang_ctx;!
- v_warning INTEGER := dbms_lob.warn_inconvertible_char;!
- v_dest_offset INTEGER := 1;!
- v_src_offset INTEGER := 1;!
-BEGIN
- IF p_clob IS NOT NULL THEN
- dbms_lob.createtemporary(v_blob, true);!
- dbms_lob.converttoblob(
- dest_lob => v_blob,
- src_clob => p_clob,
- amount => dbms_lob.lobmaxsize,
- dest_offset => v_dest_offset,
- src_offset => v_src_offset,
- blob_csid => nls_charset_id('AL32UTF8'),
- lang_context => v_lang_context,
- warning => v_warning);!
- END IF;!
- RETURN v_blob;!
-END util_clob_to_blob;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- copyright by Anton Scheffer (MIT license, see https://technology.amis.nl/2010/03/13/utl_compress-gzip-and-zlib/)
-FUNCTION util_zip_blob_to_num (
- p_blob IN BLOB,
- p_len IN INTEGER,
- p_pos IN INTEGER)
-RETURN NUMBER IS
- rv NUMBER;!
-BEGIN
- rv := utl_raw.cast_to_binary_integer(
- dbms_lob.substr(p_blob, p_len, p_pos),
- utl_raw.little_endian);!
- IF rv < 0 THEN
- rv := rv + 4294967296;!
- END IF;!
- RETURN rv;!
-END util_zip_blob_to_num;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- copyright by Anton Scheffer (MIT license, see https://technology.amis.nl/2010/03/13/utl_compress-gzip-and-zlib/)
-FUNCTION util_zip_little_endian (
- p_big IN NUMBER,
- p_bytes IN PLS_INTEGER := 4)
-RETURN RAW IS
-^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^ t_big NUMBER := p_big;!
-BEGIN
- IF t_big > 2147483647 THEN
- t_big := t_big - 4294967296;!
- END IF;!
- RETURN utl_raw.substr(utl_raw.cast_from_binary_integer(t_big, utl_raw.little_endian), 1, p_bytes);!
-END util_zip_little_endian;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- copyright by Anton Scheffer (MIT license, see https://technology.amis.nl/2010/03/13/utl_compress-gzip-and-zlib/)
-PROCEDURE util_zip_add_file (
- p_zipped_blob IN OUT BLOB,
- p_name IN VARCHAR2,
- p_content IN BLOB)
-IS
- t_now DATE;!
- t_blob BLOB;!
- t_len INTEGER;!
- t_clen INTEGER;!
- t_crc32 RAW(4) := hextoraw('00000000');!
- t_compressed BOOLEAN := false;!
- t_name RAW(32767);!
-BEGIN
- t_now := SYSDATE;!
- t_len := nvl(dbms_lob.getlength(p_content), 0);!
- IF t_len > 0 THEN
- t_blob := utl_compress.lz_compress(p_content);!
- t_clen := dbms_lob.getlength(t_blob) - 18;!
- t_compressed := t_clen < t_len;!
- t_crc32 := dbms_lob.substr(t_blob, 4, t_clen + 11);!
- END IF;!
- IF NOT t_compressed THEN
- t_clen := t_len;!
- t_blob := p_content;!
- END IF;!
- t_name := utl_i18n.string_to_raw(p_name, 'AL32UTF8');!
- dbms_lob.append(
- p_zipped_blob,
- utl_raw.concat(
- c_zip_local_file_header, -- local file header signature
- hextoraw('1400'), -- version 2.0
- CASE WHEN t_name = utl_i18n.string_to_raw(p_name, 'US8PC437')
- THEN hextoraw('0000') -- no General purpose bits
- ELSE hextoraw('0008') -- set Language encoding flag (EFS)
- END,
- CASE WHEN t_compressed
- THEN hextoraw('0800') -- deflate
- ELSE hextoraw('0000') -- stored
- END,
- util_zip_little_endian(
- to_number(TO_CHAR(t_now, 'ss')) / 2
- + to_number(TO_CHAR(t_now, 'mi')) * 32
- + to_number(TO_CHAR(t_now, 'hh24')) * 2048,
- 2), -- file last modification time
- util_zip_little_endian(
- to_number(TO_CHAR(t_now, 'dd'))
- + to_number(TO_CHAR(t_now, 'mm')) * 32
- + (to_number(TO_CHAR(t_now, 'yyyy')) - 1980) * 512,
- 2), -- file last modification date
- t_crc32, -- CRC-32
- util_zip_little_endian(t_clen), -- compressed size
- util_zip_little_endian(t_len), -- uncompressed size
- util_zip_little_endian(utl_raw.length(t_name), 2), -- file name length
- hextoraw('0000'), -- extra field length
- t_name)); -- file name
- IF t_compressed THEN
- dbms_lob.copy(p_zipped_blob, t_blob, t_clen, dbms_lob.getlength(p_zipped_blob) + 1, 11); -- compressed content
- ELSIF t_clen > 0 THEN
- dbms_lob.copy(p_zipped_blob, t_blob, t_clen, dbms_lob.getlength(p_zipped_blob) + 1, 1); -- content
- END IF;!
- IF dbms_lob.istemporary(t_blob) = 1 THEN
- dbms_lob.freetemporary(t_blob);!
- END IF;!
-END util_zip_add_file;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- copyright by Anton Scheffer (MIT license, see https://technology.amis.nl/2010/03/13/utl_compress-gzip-and-zlib/)
-PROCEDURE util_zip_finish (p_zipped_blob IN OUT BLOB) IS
- t_cnt PLS_INTEGER := 0;!
- t_offs INTEGER;!
- t_offs_dir_header INTEGER;!
- t_offs_end_header INTEGER;!
- t_comment RAW(32767) := utl_raw.cast_to_raw('Implementation by Anton Scheffer');!
-BEGIN
- t_offs_dir_header := dbms_lob.getlength(p_zipped_blob);!
- t_offs := 1;!
- WHILE dbms_lob.substr(p_zipped_blob, utl_raw.length(c_zip_local_file_header), t_offs) = c_zip_local_file_header
- LOOP
- t_cnt := t_cnt + 1;!
- dbms_lob.append(
- p_zipped_blob,
- utl_raw.concat(
- hextoraw('504B0102'), -- central directory file header signature
- hextoraw('1400'), -- version 2.0
- dbms_lob.substr(p_zipped_blob, 26, t_offs + 4),
- hextoraw('0000'), -- file comment length
- hextoraw('0000'), -- disk number where file starts
- hextoraw('0000'), -- internal file attributes: 0000 = binary file, 0100 = (ascii)text file
- CASE
- WHEN dbms_lob.substr(
- p_zipped_blob,
- 1,
- t_offs + 30 + util_zip_blob_to_num(p_zipped_blob, 2, t_offs + 26) - 1)
- IN (hextoraw('2F')/*slash*/, hextoraw('5C')/*backslash*/)
- THEN hextoraw('10000000') -- a directory/folder
- ELSE hextoraw('2000B681') -- a file
- END, -- external file attributes
- util_zip_little_endian(t_offs - 1), -- relative offset of ^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^local file header
- dbms_lob.substr(
- p_zipped_blob,
- util_zip_blob_to_num(p_zipped_blob, 2, t_offs + 26),
- t_offs + 30))); -- File name
- t_offs := t_offs + 30
- + util_zip_blob_to_num(p_zipped_blob, 4, t_offs + 18) -- compressed size
- + util_zip_blob_to_num(p_zipped_blob, 2, t_offs + 26) -- file name length
- + util_zip_blob_to_num(p_zipped_blob, 2, t_offs + 28); -- extra field length
- END LOOP;!
- t_offs_end_header := dbms_lob.getlength(p_zipped_blob);!
- dbms_lob.append(
- p_zipped_blob,
- utl_raw.concat(
- c_zip_end_of_central_directory, -- end of central directory signature
- hextoraw('0000'), -- number of this disk
- hextoraw('0000'), -- disk where central directory starts
- util_zip_little_endian(t_cnt, 2), -- number of central directory records on this disk
- util_zip_little_endian(t_cnt, 2), -- total number of central directory records
- util_zip_little_endian(t_offs_end_header - t_offs_dir_header), -- size of central directory
- util_zip_little_endian(t_offs_dir_header), -- offset of start of central directory, relative to start of archive
- util_zip_little_endian(nvl(utl_raw.length(t_comment), 0), 2), -- ZIP file comment length
- t_comment));!
-END util_zip_finish;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_multi_replace (
- p_source_string VARCHAR2,
- p_01_find VARCHAR2 DEFAULT NULL, p_01_replace VARCHAR2 DEFAULT NULL,
- p_02_find VARCHAR2 DEFAULT NULL, p_02_replace VARCHAR2 DEFAULT NULL,
- p_03_find VARCHAR2 DEFAULT NULL, p_03_replace VARCHAR2 DEFAULT NULL,
- p_04_find VARCHAR2 DEFAULT NULL, p_04_replace VARCHAR2 DEFAULT NULL,
- p_05_find VARCHAR2 DEFAULT NULL, p_05_replace VARCHAR2 DEFAULT NULL,
- p_06_find VARCHAR2 DEFAULT NULL, p_06_replace VARCHAR2 DEFAULT NULL,
- p_07_find VARCHAR2 DEFAULT NULL, p_07_replace VARCHAR2 DEFAULT NULL,
- p_08_find VARCHAR2 DEFAULT NULL, p_08_replace VARCHAR2 DEFAULT NULL,
- p_09_find VARCHAR2 DEFAULT NULL, p_09_replace VARCHAR2 DEFAULT NULL,
- p_10_find VARCHAR2 DEFAULT NULL, p_10_replace VARCHAR2 DEFAULT NULL,
- p_11_find VARCHAR2 DEFAULT NULL, p_11_replace VARCHAR2 DEFAULT NULL,
- p_12_find VARCHAR2 DEFAULT NULL, p_12_replace VARCHAR2 DEFAULT NULL)
-RETURN VARCHAR2 IS
- v_return VARCHAR2(32767);!
-BEGIN
- v_return := p_source_string;!
- IF p_01_find IS NOT NULL THEN v_return := replace(v_return, p_01_find, p_01_replace); END IF;!
- IF p_02_find IS NOT NULL THEN v_return := replace(v_return, p_02_find, p_02_replace); END IF;!
- IF p_03_find IS NOT NULL THEN v_return := replace(v_return, p_03_find, p_03_replace); END IF;!
- IF p_04_find IS NOT NULL THEN v_return := replace(v_return, p_04_find, p_04_replace); END IF;!
- IF p_05_find IS NOT NULL THEN v_return := replace(v_return, p_05_find, p_05_replace); END IF;!
- IF p_06_find IS NOT NULL THEN v_return := replace(v_return, p_06_find, p_06_replace); END IF;!
- IF p_07_find IS NOT NULL THEN v_return := replace(v_return, p_07_find, p_07_replace); END IF;!
- IF p_08_find IS NOT NULL THEN v_return := replace(v_return, p_08_find, p_08_replace); END IF;!
- IF p_09_find IS NOT NULL THEN v_return := replace(v_return, p_09_find, p_09_replace); END IF;!
- IF p_10_find IS NOT NULL THEN v_return := replace(v_return, p_10_find, p_10_replace); END IF;!
- IF p_11_find IS NOT NULL THEN v_return := replace(v_return, p_11_find, p_11_replace); END IF;!
- IF p_12_find IS NOT NULL THEN v_return := replace(v_return, p_12_find, p_12_replace); END IF;!
- RETURN v_return;!
-END util_multi_replace;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_set_build_status_run_only (p_app_export_sql CLOB) RETURN CLOB IS
- v_position PLS_INTEGER;!
-BEGIN
- v_position := instr(p_app_export_sql, ',p_exact_substitutions_only');!
- RETURN substr(p_app_export_sql, 1, v_position - 1)
- || ',p_build_status=>''RUN_ONLY'''
- || c_lf
- || substr(p_app_export_sql, v_position);!
-END util_set_build_status_run_only;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_calc_data_timestamp (p_as_of_minutes_ago IN NUMBER) RETURN TIMESTAMP IS
- v_return TIMESTAMP;!
-BEGIN
- EXECUTE IMMEDIATE
- replace(
- q'[SELECT systimestamp - INTERVAL '{{MINUTES}}' MINUTE FROM dual]',
- '{{MINUTES}}',
- TO_CHAR(p_as_of_minut^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^es_ago))
- INTO v_return;!
- RETURN v_return;!
-END util_calc_data_timestamp;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_setup_dbms_metadata (
- p_pretty IN BOOLEAN DEFAULT true,
- p_constraints IN BOOLEAN DEFAULT true,
- p_ref_constraints IN BOOLEAN DEFAULT false,
- p_partitioning IN BOOLEAN DEFAULT true,
- p_tablespace IN BOOLEAN DEFAULT false,
- p_storage IN BOOLEAN DEFAULT false,
- p_segment_attributes IN BOOLEAN DEFAULT false,
- p_sqlterminator IN BOOLEAN DEFAULT true,
- p_constraints_as_alter IN BOOLEAN DEFAULT false,
- p_emit_schema IN BOOLEAN DEFAULT false)
-IS
-BEGIN
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'PRETTY', p_pretty);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'CONSTRAINTS', p_constraints);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'REF_CONSTRAINTS', p_ref_constraints);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'PARTITIONING', p_partitioning);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'TABLESPACE', p_tablespace);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'STORAGE', p_storage);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SEGMENT_ATTRIBUTES', p_segment_attributes);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', p_sqlterminator);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'CONSTRAINTS_AS_ALTER', p_constraints_as_alter);!
- dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'EMIT_SCHEMA', p_emit_schema);!
-END util_setup_dbms_metadata;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_ensure_unique_file_names (p_export_files IN OUT NOCOPY tab_export_files) IS
- v_file_list_lookup tab_file_list_lookup;!
- v_apex_install_file_id PLS_INTEGER;!
- v_file_name VARCHAR2(256);!
- v_extension VARCHAR2(256);!
- v_base_name VARCHAR2(256);!
- v_count PLS_INTEGER;!
-BEGIN
- util_log_start('ensure unique file names in collection');!
- $if $$apex_installed $then
- -- find apex install file
- FOR i IN 1..p_export_files.count LOOP
- IF p_export_files(i).name = 'scripts/install_frontend_generated_by_apex.sql' THEN
- v_apex_install_file_id := i;!
- END IF;!
- END LOOP;!
- $end
- FOR i IN 1..p_export_files.count LOOP
- v_file_name := p_export_files(i).name;!
- v_count := 1;!
- IF instr(v_file_name, '.') > 0 THEN
- v_base_name := substr(v_file_name, 1, instr(v_file_name, '.', -1) - 1);!
- v_extension := substr(v_file_name, instr(v_file_name, '.', -1));!
- ELSE
- v_base_name := v_file_name;!
- v_extension := NULL;!
- END IF;!
- WHILE v_file_list_lookup.EXISTS(v_file_name) LOOP
- v_count := v_count + 1;!
- v_file_name := v_base_name || '_' || v_count || v_extension;!
- END LOOP;!
- v_file_list_lookup(v_file_name) := i;!
- -- correct data if needed
- IF p_export_files(i).name != v_file_name THEN
- -- correct the prompt statement
- p_export_files(i).contents := replace(
- p_export_files(i).contents,
- v_base_name,
- v_base_name || '_' || v_count);!
- -- correct the apex install file
- IF v_apex_install_file_id IS NOT NULL THEN
- p_export_files(v_apex_install_file_id).contents := regexp_replace(
- p_export_files(v_apex_install_file_id).contents,
- p_export_files(i).name || '$',
- v_file_name,
- 1, 2, 'm');!
- END IF;!
- -- correct the file name itself
- p_export_files(i).name := v_file_name;!
- END IF;!
- END LOOP;!
- util_log_stop;!
-END util_ensure_unique_file_names;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- https://community.oracle.com/message/1638237
-FUNCTION util_to_xlsx_datetime (
- p_date IN DATE)
-RETURN NUMBER IS
-BEGIN
- return p_date - date '1900-01-01' + 2;!
-END;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_log_init (p_module IN VARCHAR2) IS
-BEGIN
- g_runlog.module := substr(p_module, 1, c_app_info_length);!
- g_runlog.start_time :=^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^ systimestamp;!
- g_runlog.stop_time := NULL;!
- g_runlog.run_time := 0;!
- g_runlog.measured_time := 0;!
- g_runlog.unmeasured_time := 0;!
- g_runlog.data.DELETE;!
- g_errlog.DELETE;!
-END util_log_init;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_log_start (p_action IN VARCHAR2) IS
- v_index PLS_INTEGER;!
-BEGIN
- dbms_application_info.set_module(
- module_name => g_runlog.module,
- action_name => p_action);!
- v_index := g_runlog.data.count + 1;!
- g_runlog.data(v_index).action := substr(p_action, 1, plex.c_app_info_length);!
- g_runlog.data(v_index).start_time := systimestamp;!
-END util_log_start;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_log_error (p_name VARCHAR2) IS
- v_index PLS_INTEGER;!
- PROCEDURE add_error_to_action IS
- v_index PLS_INTEGER;!
- BEGIN
- v_index := g_runlog.data.count;!
- g_runlog.data(v_index).action := substr('ERROR: ' || g_runlog.data(v_index).action, 1, plex.c_app_info_length);!
- END add_error_to_action;!
-BEGIN
- v_index := g_errlog.count + 1;!
- g_errlog(v_index).time_stamp := systimestamp;!
- g_errlog(v_index).file_name := substr(p_name, 1, 255);!
- g_errlog(v_index).error_text := substr(sqlerrm, 1, 200);!
- g_errlog(v_index).call_stack := substr(dbms_utility.format_error_backtrace, 1, 500);!
- add_error_to_action;!
- util_log_stop;!
- g_clob := null;!
-END util_log_error;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_log_stop IS
- v_index PLS_INTEGER;!
-BEGIN
- v_index := g_runlog.data.count;!
- dbms_application_info.set_module(
- module_name => NULL,
- action_name => NULL);!
- g_runlog.data(v_index).stop_time := systimestamp;!
- g_runlog.data(v_index).elapsed := util_log_get_runtime(g_runlog.start_time, g_runlog.data(v_index).stop_time);!
- g_runlog.data(v_index).execution := util_log_get_runtime(g_runlog.data(v_index).start_time, g_runlog.data(v_index).stop_time);!
- g_runlog.measured_time := g_runlog.measured_time + g_runlog.data(v_index).execution;!
-END util_log_stop;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION util_log_get_runtime (
- p_start IN TIMESTAMP,
- p_stop IN TIMESTAMP)
-RETURN NUMBER IS
-BEGIN
- RETURN SYSDATE + ((p_stop - p_start) * 86400) - SYSDATE;!
- --sysdate + (interval_difference * 86400) - sysdate
- --https://stackoverflow.com/questions/10092032/extracting-the-total-number-of-seconds-from-an-interval-data-type
-END util_log_get_runtime;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_log_calc_runtimes IS
-BEGIN
- g_runlog.stop_time := systimestamp;!
- g_runlog.run_time := util_log_get_runtime(g_runlog.start_time, g_runlog.stop_time);!
- g_runlog.unmeasured_time := g_runlog.run_time - g_runlog.measured_time;!
-END util_log_calc_runtimes;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_append (p_content IN VARCHAR2) IS
-BEGIN
- g_cache := g_cache || p_content;!
-EXCEPTION
- WHEN value_error THEN
- IF g_clob IS NULL THEN
- g_clob := g_cache;!
- ELSE
- dbms_lob.writeappend(g_clob, length(g_cache), g_cache);!
- END IF;!
- g_cache := p_content;!
-END util_clob_append;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_append (p_content IN CLOB) IS
-BEGIN
- IF p_content IS NOT NULL THEN
- util_clob_flush_cache;!
- IF g_clob IS NULL THEN
- g_clob := p_content;!
- ELSE
- dbms_lob.writeappend(g_clob, length(p_content), p_content);!
- END IF;!
- END IF;!
-END util_clob_append;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_flush_cache IS
-BEGIN
- IF g_cache IS NOT NULL THEN
- IF g_clob IS NULL THEN
- g_clob := g_cache;!
- ELSE
- dbms_lob.writeappend(g_clob, length(g_cache), g_cache);!
- END IF;!
- g_cache := NULL;!
- END IF;!
-END util_clob_flush_cache;!
-
---------------------------------------------------------------------------------------^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^------------------------------------------
-
-PROCEDURE util_clob_add_to_export_files (
- p_export_files IN OUT NOCOPY tab_export_files,
- p_name IN VARCHAR2)
-IS
- v_index PLS_INTEGER;!
-BEGIN
- util_clob_flush_cache;!
- v_index := p_export_files.count + 1;!
- p_export_files.extend;!
- p_export_files(v_index).name := p_name;!
- p_export_files(v_index).contents := g_clob;!
- g_clob := null;!
-END util_clob_add_to_export_files;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_query_to_csv (
- p_query IN VARCHAR2,
- p_max_rows IN NUMBER DEFAULT 1000,
- p_delimiter IN VARCHAR2 DEFAULT ',',
- p_quote_mark IN VARCHAR2 DEFAULT '"',
- p_header_prefix IN VARCHAR2 DEFAULT NULL)
-IS
- -- inspired by Tim Hall: https://oracle-base.com/dba/script?category=miscellaneous&file=csv.sql
- v_cursor PLS_INTEGER;!
- v_ignore_me PLS_INTEGER;!
- v_data_count PLS_INTEGER := 0;!
- v_col_count PLS_INTEGER;!
- v_desc_tab dbms_sql.desc_tab3;!
- v_buffer_varchar2 VARCHAR2(32767 CHAR);!
- v_buffer_clob CLOB;!
- v_buffer_xmltype XMLTYPE;!
- v_buffer_long LONG;!
- v_buffer_long_length PLS_INTEGER;!
-
- PROCEDURE escape_varchar2_buffer_for_csv IS
- BEGIN
- IF v_buffer_varchar2 IS NOT NULL THEN
- -- normalize line feeds for Excel
- v_buffer_varchar2 := replace(
- replace(v_buffer_varchar2, c_crlf, c_lf),
- c_cr,
- c_lf);!
- -- if we have the delimiter character or line feeds in the string then we
- -- have to wrap the text in quotes marks and escape the quote marks
- -- inside the text by double them
- IF instr(v_buffer_varchar2, p_delimiter) > 0 OR instr(v_buffer_varchar2, c_lf) > 0 THEN
- v_buffer_varchar2 := p_quote_mark
- || replace(v_buffer_varchar2, p_quote_mark, p_quote_mark || p_quote_mark)
- || p_quote_mark;!
- END IF;!
- END IF;!
- EXCEPTION
- WHEN value_error THEN
- v_buffer_varchar2 := 'Value skipped - escaped text larger then ' || c_vc2_max_size || ' characters';!
- END escape_varchar2_buffer_for_csv;!
-
-BEGIN
- IF p_query IS NOT NULL THEN
- v_cursor := dbms_sql.open_cursor;!
- dbms_sql.parse(
- v_cursor,
- regexp_replace(p_query, ';\s*$', NULL),
- dbms_sql.native);!
- -- https://support.esri.com/en/technical-article/000010110
- -- http://bluefrog-oracle.blogspot.com/2011/11/describing-ref-cursor-using-dbmssql-api.html
- dbms_sql.describe_columns3(v_cursor, v_col_count, v_desc_tab);!
- FOR i IN 1..v_col_count LOOP
- IF v_desc_tab(i).col_type = c_clob THEN
- dbms_sql.define_column(v_cursor, i, v_buffer_clob);!
- ELSIF v_desc_tab(i).col_type = c_xmltype THEN
- dbms_sql.define_column(v_cursor, i, v_buffer_xmltype);!
- ELSIF v_desc_tab(i).col_type = c_long THEN
- dbms_sql.define_column_long(v_cursor, i);!
- ELSIF v_desc_tab(i).col_type IN (c_raw, c_long_raw, c_blob, c_bfile) THEN
- NULL; --> we ignore binary data types
- ELSE
- dbms_sql.define_column(v_cursor, i, v_buffer_varchar2, c_vc2_max_size);!
- END IF;!
- END LOOP;!
- v_ignore_me := dbms_sql.execute(v_cursor);!
-
- -- create header
- util_clob_append(p_header_prefix);!
- FOR i IN 1..v_col_count LOOP
- IF i > 1 THEN
- util_clob_append(p_delimiter);!
- END IF;!
- v_buffer_varchar2 := v_desc_tab(i).col_name;!
- escape_varchar2_buffer_for_csv;!
- util_clob_append(v_buffer_varchar2);!
- END LOOP;!
- util_clob_append(c_crlf);!
-
- -- create data
- LOOP
- EXIT WHEN dbms_sql.fetch_rows(v_cursor) = 0 OR v_data_count = p_max_rows;!
- FOR i IN 1..v_col_count LOOP
- IF i > 1 THEN
- util_clob_append(p_delimiter);!
- END IF;!
- IF v_desc_tab(i).col_type = c_clob THEN
- dbms_sql.column_value(v_cursor, i, v_buffer_clob);!
- IF length(v_buffer_clob) <= c_vc2_max_size THEN
- v_buffer_varchar2 := substr(v_buffer_clob, 1, c_vc2_max_size);!
- escape_varchar2_buffer_for_csv;!
- util_clob_append(v_buffer_varchar2);!
- ELSE
- v_buffer_varchar2 := 'CLOB value skipped - larger then ' || c_vc2_max_size || ' characters';!
- util_clob_append(v_buffer_varchar2);!
- END IF;!
- ELSIF v_desc_tab(i).col_type = c_xmltype THEN
- dbms_sql.column_value(v_cursor, i, v_buffer_xmltype);!
- ^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'| v_buffer_clob := v_buffer_xmltype.getclobval();!
- IF length(v_buffer_clob) <= c_vc2_max_size THEN
- v_buffer_varchar2 := substr(v_buffer_clob, 1, c_vc2_max_size);!
- escape_varchar2_buffer_for_csv;!
- util_clob_append(v_buffer_varchar2);!
- ELSE
- v_buffer_varchar2 := 'XML value skipped - larger then ' || c_vc2_max_size || ' characters';!
- util_clob_append(v_buffer_varchar2);!
- END IF;!
- ELSIF v_desc_tab(i).col_type = c_long THEN
- dbms_sql.column_value_long(v_cursor, i, c_vc2_max_size, 0, v_buffer_varchar2, v_buffer_long_length);!
- IF v_buffer_long_length <= c_vc2_max_size THEN
- escape_varchar2_buffer_for_csv;!
- util_clob_append(v_buffer_varchar2);!
- ELSE
- util_clob_append('LONG value skipped - larger then ' || c_vc2_max_size || ' characters');!
- END IF;!
- ELSIF v_desc_tab(i).col_type IN (c_raw, c_long_raw, c_blob, c_bfile) THEN
- util_clob_append('Binary data type skipped - not supported for CSV');!
- ELSE
- dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);!
- escape_varchar2_buffer_for_csv;!
- util_clob_append(v_buffer_varchar2);!
- END IF;!
- END LOOP;!
- util_clob_append(c_crlf);!
- v_data_count := v_data_count + 1;!
- END LOOP;!
- dbms_sql.close_cursor(v_cursor);!
- END IF;!
-END util_clob_query_to_csv;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_table_to_insert (
- p_table_name IN VARCHAR2,
- p_data_scn IN NUMBER,
- p_max_rows IN NUMBER DEFAULT 1000,
- p_insert_all_size IN NUMBER DEFAULT 10)
-IS
- v_cursor PLS_INTEGER;!
- v_ignore_me PLS_INTEGER;!
- v_data_count PLS_INTEGER := 0;!
- v_col_count PLS_INTEGER;!
- v_desc_tab dbms_sql.desc_tab3;!
- v_table_insert_prefix VARCHAR2(4000);!
- v_nls_numeric_characters VARCHAR2(30);!
- v_nls_date_format VARCHAR2(30);!
- v_nls_timestamp_format VARCHAR2(30);!
- v_nls_timestamp_tz_format VARCHAR2(30);!
- c_sqlplus_max_line_length CONSTANT PLS_INTEGER := 4500;!
- v_line_cache VARCHAR2(4998 CHAR);!
- v_line_size PLS_INTEGER := 0;!
- v_buffer_varchar2 VARCHAR2(32767 CHAR);!
- v_buffer_clob CLOB;!
- v_buffer_xmltype XMLTYPE;!
--- v_buffer_long LONG;!
- v_buffer_long_length PLS_INTEGER;!
-
- ----------------------------------------
-
- PROCEDURE set_session_nls_params IS
- BEGIN
- -- Save current values.
- for i in (SELECT parameter, value FROM nls_session_parameters) loop
- case i.parameter
- when 'NLS_NUMERIC_CHARACTERS' then v_nls_numeric_characters := i.value;!
- when 'NLS_DATE_FORMAT' then v_nls_date_format := i.value;!
- when 'NLS_TIMESTAMP_FORMAT' then v_nls_timestamp_format := i.value;!
- when 'NLS_TIMESTAMP_TZ_FORMAT' then v_nls_timestamp_tz_format := i.value;!
- else
- null;!
- end case;!
- end loop;!
- -- Set new values.
- dbms_session.set_nls('nls_numeric_characters' , '''.,''');!
- dbms_session.set_nls('nls_date_format' , '''yyyy-mm-dd hh24:mi:ss''');!
- dbms_session.set_nls('nls_timestamp_format' , '''yyyy-mm-dd hh24:mi:ssxff''');!
- dbms_session.set_nls('nls_timestamp_tz_format', '''yyyy-mm-dd hh24:mi:ssxff tzr''');!
- END set_session_nls_params;!
-
- ----------------------------------------
-
- PROCEDURE recover_session_nls_params IS
- BEGIN
- dbms_session.set_nls('nls_numeric_characters' , '''' || v_nls_numeric_characters || '''');!
- dbms_session.set_nls('nls_date_format' , '''' || v_nls_date_format || '''');!
- dbms_session.set_nls('nls_timestamp_format' , '''' || v_nls_timestamp_format || '''');!
- dbms_session.set_nls('nls_timestamp_tz_format', '''' || v_nls_timestamp_tz_format || '''');!
- END recover_session_nls_params;!
-
- ----------------------------------------
-
- FUNCTION quote_string (p_string VARCHAR2) RETURN VARCHAR2 IS
- v_string varchar2(5000 char);!
- BEGIN
- if instr(p_string, '''') = 0 then
- v_string := '''' || p_string || '''';!
- --
- elsif instr(p_string, '^''') = 0 then
- v_string := 'q''^' || p_string || '^''';!
- --
- elsif instr(p_string, '`''') = 0 then
- v_string := 'q''`' || p_string || '`''';!
- --
- elsif instr(p_string, '#''') = 0 then
- |',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^ v_string := 'q''#' || p_string || '#''';!
- --
- elsif instr(p_string, '|''') = 0 then
- v_string := 'q''|' || p_string || '|''';!
- --
- elsif instr(p_string, '!''') = 0 then
- v_string := 'q''!' || p_string || '!''';!
- --
- elsif instr(p_string, '}''') = 0 then
- v_string := 'q''{' || p_string || '}''';!
- --
- elsif instr(p_string, ']''') = 0 then
- v_string := 'q''[' || p_string || ']''';!
- --
- elsif instr(p_string, '>''') = 0 then
- v_string := 'q''<' || p_string || '>''';!
- --
- elsif instr(p_string, ')''') = 0 then
- v_string := 'q''(' || p_string || ')''';!
- else
- v_string := '''' || replace(p_string, '''', '''''') || '''';!
- end if;!
-
- -- SQL*Plus specific:
- -- SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer
- -- (Doc ID 2377701.1, https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1)
- if instr(v_string, ';'||chr(10)) = 0 then
- return v_string;!
- else
- return ('replace(' || replace(v_string, ';'||chr(10), ';!'||chr(10)) || ','';!''||chr(10),'';''||chr(10))');!
- end if;!
-
- END quote_string;!
-
- ----------------------------------------
-
- PROCEDURE line_append (p_content IN VARCHAR2) IS
- BEGIN
- v_line_cache := v_line_cache || p_content;!
- EXCEPTION
- WHEN value_error THEN
- util_clob_append(v_line_cache || c_crlf );!
- v_line_cache := p_content;!
- END line_append;!
-
- ----------------------------------------
-
- PROCEDURE line_flush_cache IS
- BEGIN
- util_clob_append(v_line_cache || c_crlf);!
- v_line_cache := null;!
- END line_flush_cache;!
-
- ----------------------------------------
-
- PROCEDURE process_varchar2_buffer(p_type varchar2) IS
- v_length PLS_INTEGER;!
- v_offset PLS_INTEGER;!
- BEGIN
- v_length := nvl(length(v_buffer_varchar2), 0);!
- IF v_length = 0 THEN
- line_append('NULL');!
- ELSE
- CASE p_type
- WHEN 'NUMBER' THEN
- line_append(v_buffer_varchar2);!
- WHEN 'STRING' THEN
- if v_length <= c_sqlplus_max_line_length then
- line_append(quote_string(v_buffer_varchar2));!
- else
- v_offset := 1;!
- while v_offset <= v_length loop
- line_append(quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)));!
- v_offset := v_offset + c_sqlplus_max_line_length;!
- end loop;!
- end if;!
- WHEN 'RAW' THEN
- if v_length <= c_sqlplus_max_line_length then
- line_append('utl_raw.cast_to_raw(' || quote_string(v_buffer_varchar2) || ')');!
- else
- v_offset := 1;!
- line_append ('utl_raw.cast_to_raw(');!
- while v_offset <= v_length loop
- line_append( case when v_offset != 1 then '|| ' end || quote_string(substr(v_buffer_varchar2, v_offset, c_sqlplus_max_line_length)) );!
- v_offset := v_offset + c_sqlplus_max_line_length;!
- end loop;!
- line_append (')');!
- end if;!
- ELSE
- line_append('ERROR: wrong p_type given for process_varchar2_buffer - allowed values are NUMBER, STRING, RAW.');!
- END CASE;!
- END IF;!
- END process_varchar2_buffer;!
-
- ----------------------------------------
-
- PROCEDURE process_clob_buffer IS
- v_length pls_integer;!
- v_offset pls_integer := 1;!
- BEGIN
- v_length := nvl(length(v_buffer_clob), 0);!
- if v_length = 0 then
- line_append('NULL');!
- else
- if v_length <= c_sqlplus_max_line_length then
- line_append('to_clob(' || quote_string(substr(v_buffer_clob, 1, c_sqlplus_max_line_length)) || ')');!
- else
- v_offset := 1;!
- while v_offset <= v_length loop
- line_append(case when v_offset != 1 then '|| ' end || 'to_clob(' || quote_string(substr(v_buffer_clob, v_offset, c_sqlplus_max_line_length)) || ')' );!
- v_offset := v_offset + c_sqlplus_max_line_length;!
- end loop;!
- end if;!
- end if;!
- END process_clob_buffer;!
-
- ----------------------------------------
-
- FUNCTION get_order_by_list RETURN VARCHAR2 IS
- v_return varchar2(4000);!
- begin
- -- try to use pk column list ...
- for i in (
- select
- ( select
- listagg(ucc.column_name, ', ') within group(order by position)
- from
- user_cons_columns ucc
- where
- ucc.constraint_name = uc.constraint_name
- ) as order_by_list
- from
- user_constraints uc
- where
- table_name = p_table_name
- and^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'` constraint_type = 'P'
- ) loop
- v_return := i.order_by_list;!
- end loop;!
-
- -- ... or fetch first three table columns as order by list
- if v_return is null then
- for i in (
- with t as (
- select
- column_name,
- column_id
- from
- user_tab_cols
- where
- table_name = p_table_name
- and data_type in ('NUMBER','VARCHAR2','DATE')
- order by
- column_id
- fetch first 3 rows only
- )
- select
- listagg(column_name, ', ') within group (order by column_id) as order_by_list
- from t
- ) loop
- v_return := i.order_by_list;!
- end loop;!
- end if;!
-
- return v_return;!
- end;!
-
- ----------------------------------------
-
- PROCEDURE parse_query_and_describe_columns IS
- BEGIN
- v_cursor := dbms_sql.open_cursor;!
- dbms_sql.parse(
- v_cursor,
- 'select * from ' || p_table_name || ' as of scn ' || p_data_scn || ' order by ' || get_order_by_list,
- dbms_sql.native);!
- -- https://support.esri.com/en/technical-article/000010110
- -- http://bluefrog-oracle.blogspot.com/2011/11/describing-ref-cursor-using-dbmssql-api.html
- dbms_sql.describe_columns3(v_cursor, v_col_count, v_desc_tab);!
- FOR i IN 1..v_col_count LOOP
- IF v_desc_tab(i).col_type = c_clob THEN
- dbms_sql.define_column(v_cursor, i, v_buffer_clob);!
- ELSIF v_desc_tab(i).col_type = c_long THEN
- dbms_sql.define_column_long(v_cursor, i);!
- ELSE
- dbms_sql.define_column(v_cursor, i, v_buffer_varchar2, c_vc2_max_size);!
- END IF;!
- v_table_insert_prefix := v_table_insert_prefix || v_desc_tab(i).col_name || ',';!
- END LOOP;!
- v_table_insert_prefix :=
- case when p_insert_all_size > 0
- then 'into '
- else 'insert into '
- end || p_table_name || '(' || rtrim(v_table_insert_prefix, ',' ) || ') values (';!
- v_ignore_me := dbms_sql.execute(v_cursor);!
- END parse_query_and_describe_columns;!
-
- ----------------------------------------
-
- -- SQL*Plus specific:
- -- SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer
- -- (Doc ID 2377701.1, https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1)
-
- PROCEDURE create_header IS
- BEGIN
- util_clob_append('-- Script generated by PLEX version ' || c_plex_version || ' - more infos here: ' || c_plex_url || c_crlf);!
- util_clob_append('-- Performance Hacks by Connor McDonald: https://connor-mcdonald.com/2019/05/17/hacking-together-faster-inserts/' || c_crlf);!
- util_clob_append('-- For strange line end replacements a big thank to SQL*Plus: https://support.oracle.com/epmos/faces/DocumentDisplay?id=2377701.1 (SQL Failed With ORA-1756 In Sqlplus But Works In SQL Developer)' || c_crlf);!
- util_clob_append('prompt Insert into ' || p_table_name || c_crlf);!
- util_clob_append('timing start inserts' || c_crlf);!
- util_clob_append('set define off feedback off sqlblanklines on' || c_crlf);!
- util_clob_append('alter session set cursor_sharing = force;' || c_crlf);!
- util_clob_append(q'^alter session set nls_numeric_characters = '.,';^' || c_crlf);!
- util_clob_append(q'^alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';^' || c_crlf);!
- util_clob_append(q'^alter session set nls_timestamp_format = 'yyyy-mm-dd hh24:mi:ssxff';^' || c_crlf);!
- util_clob_append(q'^alter session set nls_timestamp_tz_format = 'yyyy-mm-dd hh24:mi:ssxff tzr';^' || c_crlf);!
- END create_header;!
-
- ----------------------------------------
-
- PROCEDURE create_data IS
- BEGIN
- LOOP
- EXIT WHEN dbms_sql.fetch_rows(v_cursor) = 0 OR v_data_count = p_max_rows;!
- v_data_count := v_data_count + 1;!
- if v_data_count = 1 then
- create_header;!
- end if;!
- if p_insert_all_size > 0 and mod(v_data_count, p_insert_all_size) = 1 then
- util_clob_append('insert all' || c_crlf);!
- end if;!
- line_append(v_table_insert_prefix);!
- --> process row
- FOR i IN 1..v_col_count LOOP
- IF v_desc_tab(i).col_type = c_clob THEN
- dbms_sql.column_value(v_cursor, i, v_buffer_clob);!
- process_clob_buffer;!
- ELSIF v_desc_tab(i).col_type = c_long THEN
- dbms_sql.column_value_long(v_cursor, i, c_vc2_max_size, 0, v_buffer_varchar2, v_buffer_long_length);!
- if v_buffer_long_length > c_vc2_max_size then
- v_buffer_varchar2 := null;!
- end if;!
- process_varchar2_buffer('STRING');!
- ELSE
- `',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^ dbms_sql.column_value(v_cursor, i, v_buffer_varchar2);!
- IF v_desc_tab(i).col_type IN (c_number, c_binary_float, c_binary_double) THEN
- process_varchar2_buffer('NUMBER');!
- ELSIF v_desc_tab(i).col_type IN (c_raw, c_long_raw, c_blob, c_bfile) THEN
- process_varchar2_buffer('RAW');!
- ELSE
- process_varchar2_buffer('STRING');!
- END IF;!
- END IF;!
- if i != v_col_count then
- line_append(',');!
- else
- line_append(')' || case when p_insert_all_size < 1 then ';' end);!
- line_flush_cache;!
- end if;!
- END LOOP;!
- --< end process row
- if p_insert_all_size > 0 and mod(v_data_count, p_insert_all_size) = 0 then
- util_clob_append('select * from dual;' || c_crlf);!
- end if;!
-
- END LOOP;!
- dbms_sql.close_cursor(v_cursor);!
- END create_data;!
-
- ----------------------------------------
-
- PROCEDURE create_footer IS
- BEGIN
- if v_data_count = 0 then
- util_clob_append('Prompt Nothing to insert - there was no data in the source table ' || p_table_name || c_crlf);!
- else
- if p_insert_all_size > 0 and mod(v_data_count, p_insert_all_size) != 0 then
- util_clob_append('select * from dual;' || c_crlf);!
- end if;!
- util_clob_append('commit;' || c_crlf);!
- util_clob_append('alter session set cursor_sharing = exact;' || c_crlf);!
- util_clob_append('timing stop' || c_crlf);!
- end if;!
- util_clob_append('' || c_crlf);!
- END create_footer;!
-
- ----------------------------------------
-
-BEGIN
- IF p_table_name IS NOT NULL THEN
- set_session_nls_params;!
- parse_query_and_describe_columns;!
- create_data;!
- create_footer;!
- recover_session_nls_params;!
- END IF;!
-END util_clob_table_to_insert;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_create_error_log (p_export_files IN OUT NOCOPY tab_export_files) IS
-BEGIN
- IF g_errlog.count > 0 THEN
- util_log_start(g_errlog.count || ' error' || CASE WHEN g_errlog.count != 1 THEN 's' END || ' occurred: create error log');!
- util_clob_append(
- replace('# {{MAIN_FUNCTION}} - Error Log', '{{MAIN_FUNCTION}}', upper(g_runlog.module))
- || c_crlf || c_crlf || c_crlf);!
- FOR i IN 1..g_errlog.count LOOP
- util_clob_append('## ' || g_errlog(i).file_name || c_crlf || c_crlf);!
- util_clob_append(to_char(g_errlog(i).time_stamp, 'yyyy-mm-dd hh24:mi:ss.ffffff') || ': ' || g_errlog(i).error_text || c_crlf || c_crlf);!
- util_clob_append('```sql' || c_crlf || g_errlog(i).call_stack || '```' || c_crlf || c_crlf || c_crlf);!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => p_export_files,
- p_name => 'plex_error_log.md');!
- util_log_stop;!
- END IF;!
-END util_clob_create_error_log;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE util_clob_create_runtime_log (p_export_files IN OUT NOCOPY tab_export_files) IS
-BEGIN
- util_log_calc_runtimes;!
- util_clob_append(util_multi_replace('# {{MAIN_FUNCTION}} - Runtime Log
-
-- Export started at {{START_TIME}} and took {{RUN_TIME}} seconds to finish with {{ERRORS}}
-- Unmeasured execution time because of system waits, missing log calls or log overhead was {{UNMEASURED_TIME}} seconds
-- The used PLEX version was {{PLEX_VERSION}}
-- More infos here: [PLEX on GitHub]({{PLEX_URL}})
-
-' ,
- '{{MAIN_FUNCTION}}', upper(g_runlog.module),
- '{{START_TIME}}', TO_CHAR(g_runlog.start_time, 'yyyy-mm-dd hh24:mi:ss'),
- '{{RUN_TIME}}', trim(TO_CHAR(g_runlog.run_time, '999G990D000')),
- '{{UNMEASURED_TIME}}', trim(TO_CHAR(g_runlog.unmeasured_time, '999G990D000')),
- '{{PLEX_VERSION}}', c_plex_version,
- '{{PLEX_URL}}', c_plex_url,
- '{{ERRORS}}', g_errlog.count || ' error' || CASE WHEN g_errlog.count != 1 THEN 's' END));!
- util_clob_append('
-| Step | Elapsed | Execution | Action |
-|------:|----------:|------------:|:-----------------------------------------------------------------|
-' );!
- FOR i IN 1..g_runlog.data.count LOOP
- util_clob_append(util_multi_replace(
- '| {{STEP}} | {{ELAPSED}} | {{EXECUTION}} | {{ACTION}} |' || c_lf,
- '{{STEP}}', lpad(TO_CHAR(i), 5),
- '{{ELAPSED}}', lpad(trim(TO_CHAR(g_runlog.data(i).elapsed, '99990D000^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^')), 9),
- '{{EXECUTION}}', lpad(trim(TO_CHAR(g_runlog.data(i).execution, '9990D000000')), 11),
- '{{ACTION}}', rpad(g_runlog.data(i).action, 64)));!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => p_export_files,
- p_name => 'plex_runtime_log.md');!
-END util_clob_create_runtime_log;!
-
-
-
-------------------------------------------------------------------------------------------------------------------------------
--- MAIN CODE
-------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION backapp (
- $if $$apex_installed $then
- p_app_id IN NUMBER DEFAULT NULL,
- p_app_date IN BOOLEAN DEFAULT true,
- p_app_public_reports IN BOOLEAN DEFAULT true,
- p_app_private_reports IN BOOLEAN DEFAULT false,
- p_app_notifications IN BOOLEAN DEFAULT false,
- p_app_translations IN BOOLEAN DEFAULT true,
- p_app_pkg_app_mapping IN BOOLEAN DEFAULT false,
- p_app_original_ids IN BOOLEAN DEFAULT false,
- p_app_subscriptions IN BOOLEAN DEFAULT true,
- p_app_comments IN BOOLEAN DEFAULT true,
- p_app_supporting_objects IN VARCHAR2 DEFAULT NULL,
- p_app_include_single_file IN BOOLEAN DEFAULT false,
- p_app_build_status_run_only IN BOOLEAN DEFAULT false,
- $end
- $if $$ords_installed $then
- p_include_ords_modules IN BOOLEAN DEFAULT false,
- $end
- p_include_object_ddl IN BOOLEAN DEFAULT false,
- p_object_type_like IN VARCHAR2 DEFAULT NULL,
- p_object_type_not_like IN VARCHAR2 DEFAULT NULL,
- p_object_name_like IN VARCHAR2 DEFAULT NULL,
- p_object_name_not_like IN VARCHAR2 DEFAULT NULL,
- p_object_view_remove_col_list IN BOOLEAN DEFAULT true,
- p_include_data IN BOOLEAN DEFAULT false,
- p_data_as_of_minutes_ago IN NUMBER DEFAULT 0,
- p_data_max_rows IN NUMBER DEFAULT 1000,
- p_data_table_name_like IN VARCHAR2 DEFAULT NULL,
- p_data_table_name_not_like IN VARCHAR2 DEFAULT NULL,
- p_data_format IN VARCHAR2 DEFAULT 'csv',
- p_include_templates IN BOOLEAN DEFAULT true,
- p_include_runtime_log IN BOOLEAN DEFAULT true,
- p_include_error_log IN BOOLEAN DEFAULT true,
- p_base_path_backend IN VARCHAR2 DEFAULT 'app_backend',
- p_base_path_frontend IN VARCHAR2 DEFAULT 'app_frontend',
- p_base_path_web_services IN VARCHAR2 DEFAULT 'app_web_services',
- p_base_path_data IN VARCHAR2 DEFAULT 'app_data')
-RETURN tab_export_files IS
- v_apex_version NUMBER;!
- v_data_timestamp TIMESTAMP;!
- v_data_scn NUMBER;!
- v_file_path VARCHAR2(255);!
- v_current_user user_objects.object_name%TYPE;!
- v_app_workspace user_objects.object_name%TYPE;!
- v_app_owner user_objects.object_name%TYPE;!
- v_app_alias user_objects.object_name%TYPE;!
- v_ddl_files rec_ddl_files;!
- v_contents CLOB;!
- v_export_files tab_export_files;!
- v_file_list_lookup tab_file_list_lookup;!
- TYPE obj_cur_typ IS REF CURSOR;!
- v_cur obj_cur_typ;!
- v_query VARCHAR2(32767);!
-
- FUNCTION util_get_script_line (p_file_path VARCHAR2) RETURN VARCHAR2 IS
- BEGIN
- RETURN 'prompt --' || replace(p_file_path, '.sql', NULL)
- || c_lf || '@' || '../' || p_file_path || c_lf || c_lf;!
- END util_get_script_line;!
-
- PROCEDURE init IS
- BEGIN
- util_log_init(
- p_module => 'plex.backapp'
- $if $$apex_installed $then
- || CASE WHEN p_app_id IS NOT NULL THEN '(' || TO_CHAR(p_app_id) || ')' END
- $end);!
- util_log_start('init');!
- v_export_files := NEW tab_export_files();!
- v_current_user := sys_context('USERENV', 'CURRENT_USER');!
- util_log_stop;!
- END init;!
-
- $if $$apex_installed $then
- PROCEDURE check_owner IS
- CURSOR cur_owner IS
- SELECT workspace,
- owner,
- alias
- FROM apex_applications t
- WHERE t.application_id = p_app_id;!
- BEGIN
- util_log_start('check_owner');!
- IF p_app_id IS NOT NULL THEN
- OPEN cur_owner;!
- FETCH cur_owner INTO
- v_app_workspace,
- v_app_owner,
- v_app_alias;!
- CLOSE cur_owner;!
- END IF;!
- IF p_app_id IS NOT NULL AND v_app_owner IS NULL THEN
- raise_application_error(
- -20101,
- 'Could not find owner for application - are you sure you provided the righ^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^t app_id?');!
- ELSIF p_app_id IS NOT NULL AND v_app_owner != v_current_user THEN
- raise_application_error(
- -20102,
- 'You are not the owner of the app - please login as the owner.');!
- END IF;!
- util_log_stop;!
- END check_owner;!
- $end
-
- $if $$apex_installed $then
- PROCEDURE process_apex_app IS
- v_apex_files apex_t_export_files;!
- v_clob CLOB;!
- BEGIN
- -- save as individual files
- util_log_start(p_base_path_frontend || '/APEX_EXPORT:individual_files');!
- v_apex_files := apex_export.get_application(
- p_application_id => p_app_id,
- p_split => true,
- p_with_date => p_app_date,
- p_with_ir_public_reports => p_app_public_reports,
- p_with_ir_private_reports => p_app_private_reports,
- p_with_ir_notifications => p_app_notifications,
- p_with_translations => p_app_translations,
- p_with_pkg_app_mapping => p_app_pkg_app_mapping,
- p_with_original_ids => p_app_original_ids,
- p_with_no_subscriptions => CASE WHEN p_app_subscriptions THEN false ELSE true END,
- p_with_comments => p_app_comments,
- p_with_supporting_objects => p_app_supporting_objects);!
- FOR i IN 1..v_apex_files.count LOOP
- v_export_files.extend;!
- -- relocate files to own project structure
- v_export_files(i).name := replace(
- v_apex_files(i).name,
- 'f' || p_app_id || '/application/',
- p_base_path_frontend || '/');!
- -- correct prompts for relocation
- v_export_files(i).contents := replace(
- v_apex_files(i).contents,
- 'prompt --application/',
- 'prompt --' || p_base_path_frontend || '/');!
- -- special handling for install file
- IF v_export_files(i).name = 'f' || p_app_id || '/install.sql' THEN
- v_export_files(i).name := 'scripts/install_frontend_generated_by_apex.sql';!
- -- We need the clob as temporary container.
- -- When we use v_export_files(i).contents := 'someText' || replace(replace(v_export_files(i).contents, ...) ...),
- -- then Oracle 19.6 will raise "ORA-03113: end-of-file on communication channel".
- -- This was running without issues in Oracle 12.2.
- v_clob := '-- DO NOT TOUCH THIS FILE - IT WILL BE OVERWRITTEN ON NEXT PLEX BACKAPP CALL'
- || c_lf || c_lf
- || replace(replace(v_export_files(i).contents,
- '@application/', '@../' || p_base_path_frontend || '/'),
- 'prompt --install', 'prompt --install_frontend_generated_by_apex');!
- v_export_files(i).contents := v_clob;!
- END IF;!
- -- handle build status RUN_ONLY
- IF v_export_files(i).name = p_base_path_frontend || '/create_application.sql' AND p_app_build_status_run_only THEN
- v_export_files(i).contents := util_set_build_status_run_only(v_export_files(i).contents);!
- END IF;!
- v_apex_files.DELETE(i);!
- END LOOP;!
- util_log_stop;!
- --
- IF p_app_include_single_file THEN
- -- save as single file
- v_apex_files.DELETE;!
- util_log_start(p_base_path_frontend || '/APEX_EXPORT:single_file');!
- v_apex_files := apex_export.get_application(
- p_application_id => p_app_id,
- p_split => false,
- p_with_date => p_app_date,
- p_with_ir_public_reports => p_app_public_reports,
- p_with_ir_private_reports => p_app_private_reports,
- p_with_ir_notifications => p_app_notifications,
- p_with_translations => p_app_translations,
- p_with_pkg_app_mapping => p_app_pkg_app_mapping,
- p_with_original_ids => p_app_original_ids,
- p_with_no_subscriptions => CASE WHEN p_app_subscriptions THEN false ELSE true END,
- p_with_comments => p_app_comments,
- p_with_supporting_objects => p_app_supporting_objects);!
- IF p_app_build_status_run_only THEN
- v_apex_files(1).contents := util_set_build_status_run_only(v_apex_files(1).contents);!
- END IF;!
- util_clob_append(v_apex_files(1).contents);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => p_base_path_frontend || '/' || v_apex_files(1).name);!
- v_apex_files.DELETE;!
- util_log_stop;!
- END IF;!
- END process_apex_app;!
- $end
-
- PROCEDURE replace_query_like_expressions (
- p_like_list VARCHAR2,
- p_not_like_list VARCHAR2,
- p_placeholder_prefix VARCHAR2,
- p_column_name ^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'` VARCHAR2)
- IS
- v_expression_table tab_vc32k;!
- BEGIN
- -- process filter "like"
- v_expression_table := util_split(p_like_list, ',');!
- FOR i IN 1..v_expression_table.count LOOP
- v_expression_table(i) := p_column_name
- || ' like '''
- || trim(v_expression_table(i))
- || ''' escape ''\''';!
- END LOOP;!
- v_query := replace(
- v_query,
- '#' || p_placeholder_prefix || '_LIKE_EXPRESSIONS#',
- nvl(util_join(v_expression_table, ' or '), '1 = 1'));!
- -- process filter "not like"
- v_expression_table := util_split(p_not_like_list, ',');!
- FOR i IN 1..v_expression_table.count LOOP
- v_expression_table(i) := p_column_name
- || ' not like '''
- || trim(v_expression_table (i))
- || ''' escape ''\''';!
- END LOOP;!
- v_query := replace(
- v_query,
- '#' || p_placeholder_prefix || '_NOT_LIKE_EXPRESSIONS#',
- nvl(util_join(v_expression_table, ' and '), '1 = 1'));!
- $if $$debug_on $then
- dbms_output.put_line(v_query);!
- $end
- END replace_query_like_expressions;!
-
- PROCEDURE process_user_ddl IS
-
- PROCEDURE process_user IS
- BEGIN
- v_file_path := p_base_path_backend || '/_user/' || v_current_user || '.sql';!
- util_log_start(v_file_path);!
- util_setup_dbms_metadata(p_sqlterminator => false);!
- util_clob_append(util_multi_replace(q'^BEGIN
- FOR i IN (SELECT '{{CURRENT_USER}}' AS username FROM dual
- MINUS
- SELECT username FROM dba_users) LOOP
- EXECUTE IMMEDIATE q'[
---------------------------------------------------------------------------------
-{{DDL}}
---------------------------------------------------------------------------------
- ]'
- END LOOP;!
-END;!
-{{/}}
-^' ,
- '{{CURRENT_USER}}', v_current_user,
- '{{DDL}}', ltrim(dbms_metadata.get_ddl('USER', v_current_user), c_space_crlf),
- '{{/}}', c_slash));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_setup_dbms_metadata;!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_setup_dbms_metadata;!
- util_log_error(v_file_path);!
- END process_user;!
-
- PROCEDURE process_roles IS
- BEGIN
- v_file_path := p_base_path_backend || '/_user/' || v_current_user || '_roles.sql';!
- util_log_start(v_file_path);!
- FOR i IN (SELECT DISTINCT username FROM user_role_privs) LOOP
- util_clob_append(regexp_replace(
- --source string
- dbms_metadata.get_granted_ddl('ROLE_GRANT', v_current_user),
- --replace all leading whitespace
- '^\s*', NULL, 1, 0, 'm'));!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END process_roles;!
-
- PROCEDURE process_system_privileges IS
- BEGIN
- v_file_path := p_base_path_backend || '/_user/' || v_current_user || '_system_privileges.sql';!
- util_log_start(v_file_path);!
- FOR i IN (SELECT DISTINCT username FROM user_sys_privs) LOOP
- util_clob_append(regexp_replace(
- --source string
- dbms_metadata.get_granted_ddl('SYSTEM_GRANT', v_current_user),
- --replace all leading whitespace
- '^\s*', NULL, 1, 0, 'm'));!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END process_system_privileges;!
-
- PROCEDURE process_object_privileges IS
- BEGIN
- v_file_path := p_base_path_backend || '/_user/' || v_current_user || '_object_privileges.sql';!
- util_log_start(v_file_path);!
- FOR i IN (SELECT DISTINCT grantee FROM user_tab_privs WHERE grantee = v_current_user) LOOP
- util_clob_append(regexp_replace(
- --source string
- dbms_metadata.get_granted_ddl('OBJECT_GRANT', v_current_user),
- --replace all leading whitespace
- '^\s*', NULL, 1, 0, 'm'));!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END process_object_privileges;!
-
- BEGIN
- process_user;!
- process_roles;!
- process_system_privi`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`leges;!
- process_object_privileges;!
- END process_user_ddl;!
-
- PROCEDURE process_object_ddl IS
- TYPE obj_rec_typ IS RECORD (
- object_type VARCHAR2(128),
- object_name VARCHAR2(256),
- file_path VARCHAR2(512));!
- v_rec obj_rec_typ;!
- no_comments_found EXCEPTION;!
- PRAGMA EXCEPTION_INIT(no_comments_found, -31608);!
- BEGIN
- util_log_start(p_base_path_backend || '/open_objects_cursor');!
- v_query := q'^
---https://stackoverflow.com/questions/10886450/how-to-generate-entire-ddl-of-an-oracle-schema-scriptable
---https://stackoverflow.com/questions/3235300/oracles-dbms-metadata-get-ddl-for-object-type-job
-WITH t AS (
- SELECT CASE object_type
- --http://psoug.org/reference/dbms_metadata.html
- WHEN 'UNIFIED AUDIT POLICY' THEN 'AUDIT_OBJ'
- WHEN 'CONSUMER GROUP' THEN 'RMGR_CONSUMER_GROUP'
- WHEN 'DATABASE LINK' THEN 'DB_LINK'
- WHEN 'EVALUATION CONTEXT' THEN 'PROCOBJ'
- WHEN 'JAVA CLASS' THEN 'JAVA_CLASS'
- WHEN 'JAVA RESOURCE' THEN 'JAVA_RESOURCE'
- WHEN 'JAVA SOURCE' THEN 'JAVA_SOURCE'
- WHEN 'JAVA TYPE' THEN 'JAVA_TYPE'
- WHEN 'JOB' THEN 'PROCOBJ'
- WHEN 'JOB CLASS' THEN 'PROCOBJ'
- WHEN 'MATERIALIZED VIEW' THEN 'MATERIALIZED_VIEW'
- WHEN 'PACKAGE BODY' THEN 'PACKAGE_BODY'
- WHEN 'PACKAGE' THEN 'PACKAGE_SPEC'
- WHEN 'PROGRAM' THEN 'PROCOBJ'
- WHEN 'QUEUE' THEN 'AQ_QUEUE'
- WHEN 'RESOURCE PLAN' THEN 'RMGR_PLAN'
- WHEN 'RULE SET' THEN 'PROCOBJ'
- WHEN 'RULE' THEN 'PROCOBJ'
- WHEN 'SCHEDULE' THEN 'PROCOBJ'
- WHEN 'SCHEDULER GROUP' THEN 'PROCOBJ'
- WHEN 'TYPE BODY' THEN 'TYPE_BODY'
- WHEN 'TYPE' THEN 'TYPE_SPEC'
- ELSE object_type
- END AS object_type,^'
-$if $$java_installed
-$then || q'^
- CASE
- WHEN object_type like 'JAVA%' AND substr(object_name, 1, 1) = '/' THEN
- dbms_java.longname(object_name)
- ELSE
- object_name
- END AS object_name^'
-$else || q'^
- object_name^'
-$end || q'^
- FROM ^'
-$if NOT $$debug_on
-$then || 'user_objects'
-$else || '(SELECT MIN(object_name) AS object_name, object_type FROM user_objects GROUP BY object_type)'
-$end || q'^
- WHERE 1 = 1
- --- Ignore invalid object types:
- AND object_type NOT IN ('UNDEFINED','DESTINATION','EDITION','JAVA DATA','WINDOW')
- --- These objects are included within other object types:
- AND object_type NOT IN ('INDEX PARTITION','INDEX SUBPARTITION','LOB','LOB PARTITION','TABLE PARTITION','TABLE SUBPARTITION')
- --- Ignore system-generated types for collection processing:
- AND NOT (object_type = 'TYPE' AND object_name LIKE 'SYS_PLSQL_%')
- --- Ignore system-generated sequences for identity columns:
- AND NOT (object_type = 'SEQUENCE' AND object_name LIKE 'ISEQ$$_%')
- --- Ignore LOB indices, their DDL is part of the table:
- AND object_name NOT IN (SELECT index_name FROM user_lobs)
- --- Ignore nested tables, their DDL is part of their parent table:
- AND object_name NOT IN (SELECT table_name FROM user_nested_tables)
- --- Ignore materialized view tables, their DDL is part of the materialized view
- AND (object_type != 'TABLE' or object_type = 'TABLE' and not exists (select 1 from user_mviews where mview_name = object_name ))
- --- Ignore indices for materialized view tables
- AND NOT (object_type = 'INDEX' AND object_name LIKE 'SYS_C_SNAP$_%')
- --- Set user specific like filters:
- AND (#TYPE_LIKE_EXPRESSIONS#)
- AND (#TYPE_NOT_LIKE_EXPRESSIONS#)
- AND (#NAME_LIKE_EXPRESSIONS#)
- AND (#NAME_NOT_LIKE_EXPRESSIONS#)
- ORDER BY
- object_type,
- object_name
-)
-SELECT object_type,
- object_name,
- '{{BASE_PATH_APP_BACKEND}}/'
- || replace(lower(
- CASE
- WHEN object_type LIKE '%S' THEN object_type || 'ES'
- WHEN object_type LIKE '%EX' THEN regexp_replace(object_type, 'EX$', 'ICES', 1, 0, 'i')
- WHEN object_type LIKE '%Y' THEN regexp_replace(object_type, 'Y$', 'IES', 1, 0, 'i')
- ELSE object_type || 'S'
- END), ' ', '_')
- || '/' || object_name
- || CASE object_type
- WHEN 'FUNCTION' `',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'` THEN '.fnc'
- WHEN 'PACKAGE BODY' THEN '.pkb'
- WHEN 'PACKAGE' THEN '.pks'
- WHEN 'PROCEDURE' THEN '.prc'
- WHEN 'TRIGGER' THEN '.trg'
- WHEN 'TYPE BODY' THEN '.tpb'
- WHEN 'TYPE' THEN '.tps'
- ELSE '.sql'
- END AS file_path
- FROM t
-^' ;!
- v_query := replace(
- v_query,
- '{{BASE_PATH_APP_BACKEND}}',
- p_base_path_backend);!
- replace_query_like_expressions(
- p_like_list => p_object_type_like,
- p_not_like_list => p_object_type_not_like,
- p_placeholder_prefix => 'TYPE',
- p_column_name => 'object_type');!
- replace_query_like_expressions(
- p_like_list => p_object_name_like,
- p_not_like_list => p_object_name_not_like,
- p_placeholder_prefix => 'NAME',
- p_column_name => 'object_name');!
- util_setup_dbms_metadata;!
- OPEN v_cur FOR v_query;!
- util_log_stop;!
- LOOP
- FETCH v_cur INTO v_rec;!
- EXIT WHEN v_cur%notfound;!
- BEGIN
- util_log_start(v_rec.file_path);!
- CASE v_rec.object_type
- WHEN 'SEQUENCE' THEN
- v_ddl_files.sequences_(v_ddl_files.sequences_.count + 1) := v_rec.file_path;!
- WHEN 'TABLE' THEN
- v_ddl_files.tables_(v_ddl_files.tables_.count + 1) := v_rec.file_path;!
- WHEN 'INDEX' THEN
- v_ddl_files.indices_(v_ddl_files.indices_.count + 1) := v_rec.file_path;!
- WHEN 'VIEW' THEN
- v_ddl_files.views_(v_ddl_files.views_.count + 1) := v_rec.file_path;!
- WHEN 'MATERIALIZED_VIEW' THEN
- v_ddl_files.mviews_(v_ddl_files.mviews_.count + 1) := v_rec.file_path;!
- WHEN 'TYPE_SPEC' THEN
- v_ddl_files.types_(v_ddl_files.types_.count + 1) := v_rec.file_path;!
- WHEN 'TYPE_BODY' THEN
- v_ddl_files.type_bodies_(v_ddl_files.type_bodies_.count + 1) := v_rec.file_path;!
- WHEN 'TRIGGER' THEN
- v_ddl_files.triggers_(v_ddl_files.triggers_.count + 1) := v_rec.file_path;!
- WHEN 'FUNCTION' THEN
- v_ddl_files.functions_(v_ddl_files.functions_.count + 1) := v_rec.file_path;!
- WHEN 'PROCEDURE' THEN
- v_ddl_files.procedures_(v_ddl_files.procedures_.count + 1) := v_rec.file_path;!
- WHEN 'PACKAGE_SPEC' THEN
- v_ddl_files.packages_(v_ddl_files.packages_.count + 1) := v_rec.file_path;!
- WHEN 'PACKAGE_BODY' THEN
- v_ddl_files.package_bodies_(v_ddl_files.package_bodies_.count + 1) := v_rec.file_path;!
- ELSE
- v_ddl_files.other_objects_(v_ddl_files.other_objects_.count + 1) := v_rec.file_path;!
- END CASE;!
- CASE
- WHEN v_rec.object_type = 'VIEW' AND p_object_view_remove_col_list THEN
- util_clob_append(regexp_replace(
- -- source string
- ltrim(dbms_metadata.get_ddl(v_rec.object_type, v_rec.object_name), c_space_crlf),
- -- regex replace: remove additional column list from the compiler
- '\(.*\) ', NULL, 1, 1));!
- WHEN v_rec.object_type IN ('TABLE', 'MATERIALIZED_VIEW', 'INDEX', 'SEQUENCE') THEN
- util_setup_dbms_metadata(p_sqlterminator => false);!
- util_clob_append(replace(q'^BEGIN
- FOR i IN (SELECT '{{OBJECT_NAME}}' AS object_name FROM dual
- MINUS
- SELECT object_name FROM user_objects) LOOP
- EXECUTE IMMEDIATE q'[
---------------------------------------------------------------------------------
-^' ,
- '{{OBJECT_NAME}}',
- v_rec.object_name)
- || ltrim(dbms_metadata.get_ddl(v_rec.object_type, v_rec.object_name), c_space_crlf)
- || replace(q'^
---------------------------------------------------------------------------------
- ]';!
- END LOOP;!
-END;!
-{{/}}
-^' ,
- '{{/}}',
- c_slash));!
- util_setup_dbms_metadata;!
- ELSE
- util_clob_append(ltrim(dbms_metadata.get_ddl(v_rec.object_type, v_rec.object_name), c_space_crlf));!
- END CASE;!
- IF v_rec.object_type IN ('TABLE', 'VIEW', 'MATERIALIZED_VIEW') THEN
- BEGIN
- util_clob_append(c_lf || c_lf || regexp_replace(
- --source string
- dbms_metadata.get_dependent_ddl('COMMENT', v_rec.object_name),
- --replace all leading whitespace
- '^\s*', NULL, 1, 0, 'm'));!
- EXCEPTION
- WHEN no`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`_comments_found THEN NULL;!
- END;!
- END IF;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_rec.file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_setup_dbms_metadata;!
- util_log_error(v_rec.file_path);!
- END;!
- END LOOP;!
- CLOSE v_cur;!
- END process_object_ddl;!
-
- PROCEDURE process_object_grants IS
- TYPE obj_rec_typ IS RECORD (
- grantor VARCHAR2(128),
- privilege VARCHAR2(128),
- object_name VARCHAR2(256),
- file_path VARCHAR2(512));!
- v_rec obj_rec_typ;!
- BEGIN
- util_log_start(p_base_path_backend || '/grants:open_cursor');!
- v_query := q'^
-SELECT DISTINCT
- p.grantor,
- p.privilege,
- p.table_name as object_name,
- '{{BASE_PATH_APP_BACKEND}}/grants/' || p.privilege || '_on_' || p.table_name || '.sql' AS file_path
-FROM user_tab_privs p
-JOIN user_objects o ON p.table_name = o.object_name
-WHERE (#NAME_LIKE_EXPRESSIONS#)
- AND (#NAME_NOT_LIKE_EXPRESSIONS#)
-ORDER BY
- privilege,
- object_name
-^' ;!
- v_query := replace(
- v_query,
- '{{BASE_PATH_APP_BACKEND}}',
- p_base_path_backend);!
- replace_query_like_expressions(
- p_like_list => p_object_name_like,
- p_not_like_list => p_object_name_not_like,
- p_placeholder_prefix => 'NAME',
- p_column_name => 'o.object_name');!
- OPEN v_cur FOR v_query;!
- util_log_stop;!
- LOOP
- FETCH v_cur INTO v_rec;!
- EXIT WHEN v_cur%notfound;!
- BEGIN
- util_log_start(v_rec.file_path);!
- util_clob_append(ltrim(dbms_metadata.get_dependent_ddl('OBJECT_GRANT', v_rec.object_name, v_rec.grantor), c_space_crlf));!
- v_ddl_files.grants_(v_ddl_files.grants_.count + 1) := v_rec.file_path;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_rec.file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_rec.file_path);!
- END;!
- END LOOP;!
- CLOSE v_cur;!
- END process_object_grants;!
-
- PROCEDURE process_ref_constraints IS
- TYPE obj_rec_typ IS RECORD (
- table_name VARCHAR2(256),
- constraint_name VARCHAR2(256),
- file_path VARCHAR2(512));!
- v_rec obj_rec_typ;!
- BEGIN
- util_log_start(p_base_path_backend || '/ref_constraints:open_cursor');!
- v_query := q'^
-SELECT table_name,
- constraint_name,
- '{{BASE_PATH_APP_BACKEND}}/ref_constraints/' || constraint_name || '.sql' AS file_path
-FROM user_constraints
-WHERE constraint_type = 'R'
- AND (#NAME_LIKE_EXPRESSIONS#)
- AND (#NAME_NOT_LIKE_EXPRESSIONS#)
-ORDER BY
- table_name,
- constraint_name
-^' ;!
- v_query := replace(
- v_query,
- '{{BASE_PATH_APP_BACKEND}}',
- p_base_path_backend);!
- replace_query_like_expressions(
- p_like_list => p_object_name_like,
- p_not_like_list => p_object_name_not_like,
- p_placeholder_prefix => 'NAME',
- p_column_name => 'table_name');!
- OPEN v_cur FOR v_query;!
- util_log_stop;!
- LOOP
- FETCH v_cur INTO v_rec;!
- EXIT WHEN v_cur%notfound;!
- BEGIN
- util_log_start(v_rec.file_path);!
- util_setup_dbms_metadata(p_sqlterminator => false);!
- util_clob_append(replace(q'^
-BEGIN
-FOR i IN (SELECT '{{CONSTRAINT_NAME}}' AS constraint_name FROM dual
- MINUS
- SELECT constraint_name FROM user_constraints) LOOP
- EXECUTE IMMEDIATE q'[
---------------------------------------------------------------------------------
-^' ,
- '{{CONSTRAINT_NAME}}',
- v_rec.constraint_name)
- || ltrim(dbms_metadata.get_ddl('REF_CONSTRAINT', v_rec.constraint_name), c_space_crlf)
- || replace(q'^
---------------------------------------------------------------------------------
- ]';!
-END LOOP;!
-END;!
-{{/}}
-^' ,
- '{{/}}',
- c_slash));!
- util_setup_dbms_metadata;!
- v_ddl_files.ref_constraints_(v_ddl_files.ref_constraints_.count + 1) := v_rec.file_path;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_rec.file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_setup_dbms_metadata;!
- util_log_error(v_rec.file_path);!
- END;!
- END LOOP;!
- CLOSE v_cur;!
- END process_ref_constraints;!
-
- PROCEDURE create_backend_install_file IS
- BEGIN
- v_file_path :`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^= 'scripts/install_backend_generated_by_plex.sql';!
- util_log_start(v_file_path);!
- util_clob_append('/* A T T E N T I O N
-DO NOT TOUCH THIS FILE or set the PLEX.BackApp parameter p_include_object_ddl
-to false - otherwise your changes would be overwritten on next PLEX.BackApp
-call. It is recommended to export your object DDL only ones on initial
-repository creation and then start to use the "files first approach".
-*/
-
-set define off verify off feedback off
-whenever sqlerror exit sql.sqlcode rollback
-
-prompt --install_backend_generated_by_plex
-
-' );!
- FOR i IN 1..v_ddl_files.sequences_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.sequences_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.tables_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.tables_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.ref_constraints_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.ref_constraints_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.types_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.types_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.packages_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.packages_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.views_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.views_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.mviews_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.mviews_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.indices_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.indices_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.type_bodies_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.type_bodies_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.functions_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.functions_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.procedures_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.procedures_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.package_bodies_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.package_bodies_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.triggers_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.triggers_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.grants_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.grants_(i)));!
- END LOOP;!
- FOR i IN 1..v_ddl_files.other_objects_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.other_objects_(i)));!
- END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END create_backend_install_file;!
-
- $if $$ords_installed $then
- PROCEDURE process_ords_modules IS
- v_module_name user_ords_modules.name%type;!
- --
- PROCEDURE export_ords_modules IS
- BEGIN
- util_log_start(p_base_path_web_services || '/open_modules_cursor');!
- OPEN v_cur FOR 'select name from user_ords_modules';!
- util_log_stop;!
- --
- LOOP
- FETCH v_cur INTO v_module_name;!
- EXIT WHEN v_cur%notfound;!
- BEGIN
- v_file_path := p_base_path_web_services || '/' || v_module_name || '.sql';!
- util_log_start(v_file_path);!
- util_clob_append(ords_export.export_module(p_module_name => v_module_name) || chr(10) || '/');!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- v_ddl_files.ords_modules_(v_ddl_files.ords_modules_.count + 1) := v_file_path;!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END;!
- END LOOP;!
- CLOSE v_cur;!
- END export_ords_modules;!
- --
- PROCEDURE create_ords_install_file IS
- BEGIN
- v_file_path := 'scripts/install_web_services_generated_by_ords.sql';!
- util_log_start(v_file_path);!
- util_clob_append('/* A T T E N T I O N
-DO NOT TOUCH THIS FILE or set the PLEX.BackApp parameter p_include_ords_modules
-to false - otherwise your changes would be overwritten on next PLEX.BackApp
-call.
-*/
-
-set define off verify off feedback off
-whenever sqlerror exit sql.sqlcode rollback
-
-prompt --install_web_services_generated_by_ords
-
-' );!
- FOR i IN 1..v_ddl_files.ords_modules_.count LOOP
- util_clob_append(util_get_script_line(v_ddl_files.ords_modules_(i)));!
- ^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'` END LOOP;!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END create_ords_install_file;!
-
- BEGIN
- export_ords_modules;!
- IF v_ddl_files.ords_modules_.count > 0 THEN
- create_ords_install_file;!
- END IF;!
- END process_ords_modules;!
- $end
-
- PROCEDURE process_data IS
- TYPE obj_rec_typ IS RECORD (
- table_name VARCHAR2(256),
- pk_columns VARCHAR2(4000));!
- v_rec obj_rec_typ;!
- BEGIN
- util_log_start(p_base_path_data || '/open_tables_cursor');!
- v_query := q'^
-SELECT table_name,
- (SELECT LISTAGG(column_name, ', ') WITHIN GROUP(ORDER BY position)
- FROM user_cons_columns
- WHERE constraint_name = (SELECT constraint_name
- FROM user_constraints c
- WHERE constraint_type = 'P'
- AND c.table_name = t.table_name)
- ) AS pk_columns
- FROM user_tables t
- WHERE table_name IN (SELECT table_name FROM user_tables
- MINUS
- SELECT table_name FROM user_external_tables)
- AND (#NAME_LIKE_EXPRESSIONS#)
- AND (#NAME_NOT_LIKE_EXPRESSIONS#)
- ORDER BY
- table_name
-^' ;!
- replace_query_like_expressions(
- p_like_list => p_data_table_name_like,
- p_not_like_list => p_data_table_name_not_like,
- p_placeholder_prefix => 'NAME',
- p_column_name => 'table_name');!
- OPEN v_cur FOR v_query;!
- util_log_stop;!
- --
- util_log_start(p_base_path_data || '/get_scn');!
- v_data_timestamp := util_calc_data_timestamp(nvl(p_data_as_of_minutes_ago, 0));!
- v_data_scn := timestamp_to_scn(v_data_timestamp);!
- util_log_stop;!
- LOOP
- FETCH v_cur INTO v_rec;!
- EXIT WHEN v_cur%notfound;!
-
- -- csv file
- IF upper(p_data_format) LIKE '%CSV%' THEN
- BEGIN
- v_file_path := p_base_path_data || '/' || v_rec.table_name || '.csv';!
- util_log_start(v_file_path);!
- util_clob_query_to_csv(
- p_query => 'SELECT * FROM ' || v_rec.table_name || ' AS OF SCN ' || v_data_scn ||
- CASE
- WHEN v_rec.pk_columns IS NOT NULL
- THEN ' ORDER BY ' || v_rec.pk_columns
- ELSE NULL
- END,
- p_max_rows => p_data_max_rows);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END;!
- END IF;!
-
- -- insert script
- IF upper(p_data_format) LIKE '%INSERT%' THEN
- BEGIN
- v_file_path := p_base_path_data || '/' || v_rec.table_name || '.sql';!
- util_log_start(v_file_path);!
- util_clob_table_to_insert(
- p_table_name => v_rec.table_name,
- p_data_scn => v_data_scn,
- p_max_rows => p_data_max_rows,
- p_insert_all_size => to_number(nvl(regexp_substr(p_data_format,'insert:(\d+)',1,1,'i',1), '10')));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(v_file_path);!
- END;!
- END IF;!
- END LOOP;!
- CLOSE v_cur;!
-
- END process_data;!
-
- PROCEDURE create_template_files IS
- v_file_template VARCHAR2(32767 CHAR);!
- PROCEDURE readme_file IS
- BEGIN
- v_file_template := q'^Your Global README File
-=======================
-
-It is a good practice to have a README file in the root of your project with
-a high level overview of your application. Put the more detailed docs in the
-docs folder.
-
-You can start with a copy of this file. Rename it to README.md and try to use
-Markdown when writing your content - this has many benefits and you don't waist
-time by formatting your docs. If you are unsure have a look at some projects at
-[Github](https://github.com) or any other code hosting platform.
-
-Depending on your options when calling `plex.backapp` these files are generated
-for you:
-
-- scripts/install_backend_generated_by_plex.sql
-- scripts/install_frontend_generated_by_apex.sql
-- scripts/install_web_services_generated_by_ords.sql
-
-Do not touch these generated install files. They wil`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`l be overwritten on each
-plex call. Depending on your call parameters it would be ok to modify the file
-install_backend_generated_by_plex - especially when you follow the files first
-approach and export your schema DDL only ones to have a starting point for you
-repository.
-
-If you need to do modifications for the install process then have a look at the
-following templates - they call the generated files and you can do your own
-stuff before or after the calls.
-
-- scripts/templates/1_export_app_from_DEV.bat
-- scripts/templates/2_install_app_into_INT.bat
-- scripts/templates/3_install_app_into_PROD.bat
-- scripts/templates/export_app_custom_code.sql
-- scripts/templates/install_app_custom_code.sql
-
-If you want to use these files please make a copy into the scripts directory
-and modify it to your needs. Doing it this way your changes are overwrite save.
-
-[Feedback is welcome]({{PLEX_URL}}/issues/new)
-^' ;!
- v_file_path := 'plex_README.md';!
- util_log_start(v_file_path);!
- util_clob_append(replace(
- v_file_template,
- '{{PLEX_URL}}',
- c_plex_url));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END readme_file;!
-
- PROCEDURE export_batch_file IS
- BEGIN
- v_file_template := q'^rem Template generated by PLEX version {{PLEX_VERSION}}
-rem More infos here: {{PLEX_URL}}
-
-{{@}}echo off
-setlocal
-set "areyousure=N"
-
-rem ### BEGIN CONFIG ###########################################################
-rem Align substrings to your operating system locale: (how it works: https://stackoverflow.com/a/23558738)
-set "datetime=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%"
-set "datetime=%datetime: =0%"
-set "systemrole={{SYSTEMROLE}}"
-set "connection=localhost:1521/xepdb1"
-set "app_id={{APP_ID}}"
-set "app_schema={{APP_OWNER}}"
-set "scriptfile=export_app_custom_code.sql"
-set "logfile=logs/%datetime%_export_app_%app_id%_from_%app_schema%_at_%systemrole%.log"
-set "zipfile=BackApp_%app_id%_from_%app_schema%_at_%systemrole%_%datetime%.zip"
-rem ### END CONFIG #############################################################
-
-:PROMPT
-echo(
-echo(
-set /p "areyousure=Run %scriptfile% on %app_schema%@%systemrole%(%connection%) [Y/N]? " || set "areyousure=N"
-if /i %areyousure% neq y goto END
-set NLS_LANG=AMERICAN_AMERICA.UTF8
-set /p "password=Please enter password for %app_schema% [default = oracle]: " || set "password=oracle"
-echo This is the runlog for %scriptfile% on %app_schema%@%systemrole%(%connection%) > %logfile%
-echo exit | sqlplus -S %app_schema%/%password%@%connection% ^
-{{@}}%scriptfile% ^
-%logfile% ^
-%zipfile% ^
-%app_id%
-
-if %errorlevel% neq 0 echo ERROR: SQL script finished with return code %errorlevel% :-( >> %logfile%
-if %errorlevel% neq 0 echo ERROR: SQL script finished with return code %errorlevel% :-(
-if %errorlevel% neq 0 goto END
-
-echo Start Post Processing on Client >> %logfile%
-echo Start Post Processing on Client
-echo ========================================================================= >> %logfile%
-echo =========================================================================
-
-echo Decode file %zipfile%.base64 >> %logfile%
-echo Decode file %zipfile%.base64
-certutil -decode %zipfile%.base64 %zipfile% >> %logfile%
-if %errorlevel% neq 0 echo ERROR: Unable to decode %zipfile%.base64 :-( >> %logfile%
-if %errorlevel% neq 0 echo ERROR: Unable to decode %zipfile%.base64 :-(
-if %errorlevel% neq 0 goto END
-del %zipfile%.base64
-
-echo Unzip file %zipfile% >> %logfile%
-echo Unzip file %zipfile%
-echo - For unzip details see %logfile%
-tar -xvf %zipfile% -C .. 2>> %logfile%
-if %errorlevel% neq 0 echo ERROR: Unable to unzip %zipfile% :-( >> %logfile%
-if %errorlevel% neq 0 echo ERROR: Unable to unzip %zipfile% :-(
-if %errorlevel% neq 0 goto END
-
-echo Delete file %zipfile% >> %logfile%
-echo Delete file %zipfile%
-del %zipfile%
-
-echo ========================================================================= >> %logfile%
-echo =========================================================================
-echo Post Processing DONE >> %logfile%
-echo Post Processing DONE
-echo( >> %logfile%
-echo(
-
-:END
-rem Remove "pause" for fully automated setup:
-pause
-if %errorlevel% neq 0 exit /b %errorlevel%
-^' ;!
- v_file_path := 'scripts/templates/1_export_app_from_DEV.bat';!
- util_log_start(v_file_path);!
- util_clob_append(util_multi_replace(
- v_file_template,
- '{{PLEX_VERSION}}', c_plex_v`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`ersion,
- '{{PLEX_URL}}', c_plex_url,
- '{{SYSTEMROLE}}', 'DEV',
- $if $$apex_installed $then
- '{{APP_OWNER}}', v_app_owner,
- '{{APP_ID}}', p_app_id,
- $end
- '{{@}}', c_at));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END export_batch_file;!
-
- PROCEDURE export_sq_file IS
- BEGIN
- v_file_template := q'^/*******************************************************************************
-Template generated by PLEX version {{PLEX_VERSION}}
-More infos here: {{PLEX_URL}}
-
-You need to provide three parameters:
-- logfile: path to the logfile for the script console output
-- zipfile: path to the export zip file - this will be created with the spool command
-- app_id: the APEX app ID you want to export - only relevant when you have APEX installed
-
-Example call for Windows:
-
- echo exit | sqlplus -S app_schema/password@connection ^
- {{@}}export_app_custom_code.sql ^
- my_logfile.log ^
- my_zipfile.zip ^
- 100
-
-*******************************************************************************/
-
-set timing on
-timing start EXPORT_APP
-set timing off verify off feedback off heading off
-set trimout on trimspool on pagesize 0 linesize 5000 long 100000000 longchunksize 32767
-whenever sqlerror exit sql.sqlcode rollback
--- whenever oserror exit failure rollback
-define logfile = "&1."
-define zipfile = "&2..base64"
-spool "&logfile" append
-variable contents clob
-variable app_id number
-BEGIN
- :app_id := &3;!
-END;!
-{{/}}
-
-prompt
-prompt Start Export from Database
-prompt =========================================================================
-
-prompt Do the app export and save to zip file
-prompt ATTENTION: Depending on your options this could take some time ...
-BEGIN
- :contents := plex.to_base64(plex.to_zip(plex.backapp(
- -- These are the defaults - align it to your needs:^';!
- $if $$apex_installed $then
- v_file_template := v_file_template || q'^
- p_app_id => :app_id,
- p_app_date => true,
- p_app_public_reports => true,
- p_app_private_reports => false,
- p_app_notifications => false,
- p_app_translations => true,
- p_app_pkg_app_mapping => false,
- p_app_original_ids => false,
- p_app_subscriptions => true,
- p_app_comments => true,
- p_app_supporting_objects => null,
- p_app_include_single_file => false,
- p_app_build_status_run_only => false,^';!
- $end
- $if $$ords_installed $then
- v_file_template := v_file_template || q'^
-
- p_include_ords_modules => false,^';!
- $end
- v_file_template := v_file_template || q'^
-
- p_include_object_ddl => true,
- p_object_type_like => null,
- p_object_type_not_like => null,
- p_object_name_like => null,
- p_object_name_not_like => null,
-
- p_include_data => false,
- p_data_as_of_minutes_ago => 0,
- p_data_max_rows => 1000,
- p_data_table_name_like => null,
- p_data_table_name_not_like => null,
-
- p_include_templates => true,
- p_include_runtime_log => true,
- p_include_error_log => true,
- p_base_path_backend => 'app_backend',
- p_base_path_frontend => 'app_frontend',
- p_base_path_data => 'app_data')));!
-END;!
-{{/}}
-
-prompt Spool the resulting base64 encoded zip file to client disk
-spool off
-set termout off
-spool "&zipfile"
-print contents
-set termout on
-spool "&logfile." append
-timing stop EXPORT_APP
-prompt =========================================================================
-prompt Export DONE :-)
-prompt
-^' ;!
- v_file_path := 'scripts/templates/export_app_custom_code.sql';!
- util_log_start(v_file_path);!
- util_clob_append(util_multi_replace(
- v_file_template,
- '{{PLEX_VERSION}}', c_plex_version,
- '{{PLEX_URL}}', c_plex_url,
- '{{/}}', c_slash,
- '{{@}}', c_at));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END export_sq_file;!
-
- PROCEDURE install_batch_files IS
- BEGIN
- v_file_template := q'^rem Template generated by PLEX version {{PLEX_VERSION}}
-rem More infos here: {{PLEX_URL}}
-
-{{@}}echo off
-setlocal
-set "areyousure=N"
-
-rem ### BEGI`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`N CONFIG ###########################################################
-rem Align substrings to your operating system locale: (how it works: https://stackoverflow.com/a/23558738)
-set "datetime=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%"
-set "datetime=%datetime: =0%"
-set "systemrole={{SYSTEMROLE}}"
-set "connection=localhost:1521/xepdb1"
-set "app_id={{APP_ID}}"
-set "app_alias={{APP_ALIAS}}"
-set "app_schema={{APP_OWNER}}"
-set "app_workspace={{APP_WORKSPACE}}"
-set "scriptfile=install_app_custom_code.sql"
-set "logfile=logs/%datetime%_install_app_%app_id%_into_%app_schema%_at_%systemrole%.log"
-rem ### END CONFIG #############################################################
-
-:PROMPT
-echo.
-echo.
-set /p "areyousure=Run %scriptfile% on %app_schema%@%systemrole%(%connection%) [Y/N]? " || set "areyousure=N"
-if /i %areyousure% neq y goto END
-set NLS_LANG=AMERICAN_AMERICA.UTF8
-set /p "password=Please enter password for %app_schema% [default = oracle]: " || set "password=oracle"
-echo This is the runlog for %scriptfile% on %app_schema%@%systemrole%(%connection%) > %logfile%
-echo exit | sqlplus -S %app_schema%/%password%@%connection% ^
-{{@}}%scriptfile% ^
-%logfile% ^
-%app_id% ^
-%app_alias% ^
-%app_schema% ^
-%app_workspace%
-
-if %errorlevel% neq 0 echo ERROR: SQL script finished with return code %errorlevel% :-( >> %logfile%
-if %errorlevel% neq 0 echo ERROR: SQL script finished with return code %errorlevel% :-(
-
-:END
-rem Remove "pause" for fully automated setup:
-pause
-if %errorlevel% neq 0 exit /b %errorlevel%
-^' ;!
- v_file_path := 'scripts/templates/2_install_app_into_INT.bat';!
- util_log_start(v_file_path);!
- util_clob_append(util_multi_replace(
- v_file_template,
- '{{PLEX_VERSION}}', c_plex_version,
- '{{PLEX_URL}}', c_plex_url,
- '{{SYSTEMROLE}}', 'INT',
- $if $$apex_installed $then
- '{{APP_ID}}', p_app_id,
- '{{APP_ALIAS}}', v_app_alias,
- '{{APP_OWNER}}', v_app_owner,
- '{{APP_WORKSPACE}}', v_app_workspace,
- $end
- '{{@}}', c_at));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
-
- v_file_path := 'scripts/templates/3_install_app_into_PROD.bat';!
- util_log_start(v_file_path);!
- util_clob_append(util_multi_replace(
- v_file_template,
- '{{PLEX_VERSION}}', c_plex_version,
- '{{PLEX_URL}}', c_plex_url,
- '{{SYSTEMROLE}}', 'PROD',
- $if $$apex_installed $then
- '{{APP_ID}}', p_app_id,
- '{{APP_ALIAS}}', v_app_alias,
- '{{APP_OWNER}}', v_app_owner,
- '{{APP_WORKSPACE}}', v_app_workspace,
- $end
- '{{@}}', c_at));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END install_batch_files;!
-
- PROCEDURE install_sql_file IS
- BEGIN
- v_file_template := q'^/*******************************************************************************
-Template generated by PLEX version {{PLEX_VERSION}}
-More infos here: {{PLEX_URL}}
-
-You need to provide five parameters:
-- logfile: path to the logfile for the script console output
-- app_id: the APEX app ID you want to have for the installation
-- app_alias: the alias you want to have for your app
-- app_schema: the parsing schema for your app
-- app_workspace: the workspace where your app should be installed
-
-Example call for Windows:
-
- echo exit | sqlplus -S app_schema/password@connection ^
- {{@}}install_app_custom_code.sql ^
- my_logfile.log ^
- 100 ^
- MY_APP_ALIAS ^
- MY_APP_SCHEMA ^
- MY_APP_WORKSPACE
-
-*******************************************************************************/
-
-set timing on define on
-timing start INSTALL_APP
-set timing off verify off feedback off
-whenever sqlerror exit sql.sqlcode rollback
--- whenever oserror exit failure rollback
-define logfile = "&1"
-spool "&logfile" append
-variable app_id varchar2(100)
-variable app_alias varchar2(100)
-variable app_schema varchar2(100)
-variable app_workspace varchar2(100)
-BEGIN
- :app_id := &2;!
- :app_alias := '&3';!
- :app_schema := '&4';!
- :app_workspace := '&5';!
-END;!
-{{/}}
-set define off
-
-
-prompt
-prompt Start Installation
-prompt =========================================================================
-
-prompt Install Backend
-{{@}}install_backend_generated_by_plex.`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'`sql
-
-prompt Compile Invalid Objects
-BEGIN
- dbms_utility.compile_schema(
- schema => user,
- compile_all => false,
- reuse_settings => true);!
-END;!
-{{/}}
-
-prompt Check Invalid Objects
-DECLARE
- v_count PLS_INTEGER;!
- v_objects VARCHAR2(4000);!
-BEGIN
- SELECT COUNT(*), chr(10) ||
- listagg('- ' || object_name || ' (' || object_type || ')', chr(10)) within GROUP(ORDER BY object_name)
- INTO v_count, v_objects
- FROM user_objects
- WHERE status = 'INVALID';!
- IF v_count > 0 THEN
- raise_application_error(-20000, chr(10) || chr(10) ||
- 'Found ' || v_count || ' invalid object' || CASE WHEN v_count > 1 THEN 's' END ||
- ' :-( ' || chr(10) || '=============================' || v_objects || chr(10) || chr(10) );!
- END IF;!
-END;!
-{{/}}
-
-prompt Install Web Services
-{{@}}install_web_services_generated_by_ords.sql
-
-prompt Install Frontend
-BEGIN
- apex_application_install.set_workspace_id(APEX_UTIL.find_security_group_id(:app_workspace));!
- apex_application_install.set_application_alias(:app_alias);!
- apex_application_install.set_application_id(:app_id);!
- apex_application_install.set_schema(:app_schema);!
- apex_application_install.generate_offset;!
-END;!
-{{/}}
-{{@}}install_frontend_generated_by_apex.sql
-
-timing stop INSTALL_APP
-prompt =========================================================================
-prompt Installation DONE :-)
-prompt
-^' ;!
- v_file_path := 'scripts/templates/install_app_custom_code.sql';!
- util_log_start(v_file_path);!
- util_clob_append(util_multi_replace(
- v_file_template,
- '{{PLEX_VERSION}}', c_plex_version,
- '{{PLEX_URL}}', c_plex_url,
- '{{/}}', c_slash,
- '{{@}}', c_at));!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END install_sql_file;!
-
- BEGIN
- readme_file;!
- export_batch_file;!
- export_sq_file;!
- install_batch_files;!
- install_sql_file;!
- END create_template_files;!
-
- PROCEDURE create_directory_keepers IS
- v_the_point VARCHAR2(30) := '. < this is the point ;-)';!
- BEGIN
- v_file_path := 'docs/_save_your_docs_here.txt';!
- util_log_start(v_file_path);!
- util_clob_append(v_the_point);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- --
- v_file_path := 'scripts/logs/_spool_your_script_logs_here.txt';!
- util_log_start(v_file_path);!
- util_clob_append(v_the_point);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- --
- v_file_path := 'tests/_save_your_tests_here.txt';!
- util_log_start(v_file_path);!
- util_clob_append(v_the_point);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => v_file_path);!
- util_log_stop;!
- END create_directory_keepers;!
-
- PROCEDURE finish IS
- BEGIN
- util_ensure_unique_file_names(v_export_files);!
- IF p_include_error_log THEN
- util_clob_create_error_log(v_export_files);!
- END IF;!
- IF p_include_runtime_log THEN
- util_clob_create_runtime_log(v_export_files);!
- END IF;!
- END finish;!
-
-BEGIN
- init;!
- $if $$apex_installed $then
- check_owner;!
- IF p_app_id IS NOT NULL THEN
- process_apex_app;!
- END IF;!
- $end
- IF p_include_object_ddl THEN
- process_user_ddl;!
- process_object_ddl;!
- $if NOT $$debug_on $then
- -- excluded in debug mode (potential long running object types)
- process_object_grants;!
- process_ref_constraints;!
- $end
- create_backend_install_file;!
- END IF;!
- $if $$ords_installed $then
- IF p_include_ords_modules THEN
- process_ords_modules;!
- END IF;!
- $end
- IF p_include_data THEN
- process_data;!
- END IF;!
- IF p_include_templates THEN
- create_template_files;!
- create_directory_keepers;!
- END IF;!
- finish;!
- RETURN v_export_files;!
-END backapp;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-PROCEDURE add_query (
- p_query VARCHAR2,
- p_file_name VARCHAR2,
- p_max_rows NUMBER DEFAULT 1000)
-IS
- v_index PLS_INTEGER;!
-BEGIN
- v_index := g_queries.count + 1;!
- g_queries(v_index).query := p_query;!
- g_queries(v_index).file_name := p_file_name;!
- g_queries(v_index).max_rows := p_max_rows;!
-END add_query;!
-
-------`',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(q'^--------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION queries_to_csv (
- p_delimiter IN VARCHAR2 DEFAULT ',',
- p_quote_mark IN VARCHAR2 DEFAULT '"',
- p_header_prefix IN VARCHAR2 DEFAULT NULL,
- p_include_runtime_log IN BOOLEAN DEFAULT true,
- p_include_error_log IN BOOLEAN DEFAULT true)
-RETURN tab_export_files IS
- v_export_files tab_export_files;!
-
- PROCEDURE init IS
- BEGIN
- IF g_queries.count = 0 THEN
- raise_application_error(
- -20201,
- 'You need first to add queries by using plex.add_query. Calling plex.queries_to_csv clears the global queries array for subsequent processing.');!
- END IF;!
- util_log_init(p_module => 'plex.queries_to_csv');!
- util_log_start('init');!
- v_export_files := NEW tab_export_files();!
- util_log_stop;!
- END init;!
-
- PROCEDURE process_queries IS
- BEGIN
- FOR i IN g_queries.first..g_queries.last LOOP
- BEGIN
- util_log_start('process_query ' || TO_CHAR(i) || ': ' || g_queries(i).file_name);!
- util_clob_query_to_csv(
- p_query => g_queries(i).query,
- p_max_rows => g_queries(i).max_rows,
- p_delimiter => p_delimiter,
- p_quote_mark => p_quote_mark,
- p_header_prefix => p_header_prefix);!
- util_clob_add_to_export_files(
- p_export_files => v_export_files,
- p_name => g_queries(i).file_name || '.csv');!
- util_log_stop;!
- EXCEPTION
- WHEN OTHERS THEN
- util_log_error(g_queries(i).file_name);!
- END;!
- END LOOP;!
- END process_queries;!
-
- PROCEDURE finish IS
- BEGIN
- g_queries.DELETE;!
- util_ensure_unique_file_names(v_export_files);!
- IF p_include_error_log THEN
- util_clob_create_error_log(v_export_files);!
- END IF;!
- IF p_include_runtime_log THEN
- util_clob_create_runtime_log(v_export_files);!
- END IF;!
- END finish;!
-
-BEGIN
- init;!
- process_queries;!
- finish;!
- RETURN v_export_files;!
-EXCEPTION
- WHEN others THEN
- g_queries.DELETE;!
-END queries_to_csv;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION to_zip (p_file_collection IN tab_export_files) RETURN BLOB IS
- v_zip BLOB;!
-BEGIN
- dbms_lob.createtemporary(v_zip, true);!
- util_log_start('post processing with to_zip: ' || p_file_collection.count || ' files');!
- FOR i IN 1..p_file_collection.count LOOP
- util_zip_add_file(
- p_zipped_blob => v_zip,
- p_name => p_file_collection(i).name,
- p_content => util_clob_to_blob(p_file_collection(i).contents));!
- END LOOP;!
- util_zip_finish(v_zip);!
- util_log_stop;!
- util_log_calc_runtimes;!
- RETURN v_zip;!
-END to_zip;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
--- copyright by Tim Hall, see https://oracle-base.com/dba/script?category=miscellaneous&file=base64encode.sql
-FUNCTION to_base64(p_blob IN BLOB) RETURN CLOB IS
- v_bas64 CLOB;!
- v_step PLS_INTEGER := 14400; -- make sure you set a multiple of 3 not higher than 24573
- -- size of a whole multiple of 48 is beneficial to get NEW_LINE after each 64 characters
-BEGIN
- util_log_start('post processing with to_base64');!
- FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_blob) - 1 ) / v_step) LOOP
- v_bas64 := v_bas64 || UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_blob, v_step, i * v_step + 1)));!
- END LOOP;!
- util_log_stop;!
- util_log_calc_runtimes;!
- RETURN v_bas64;!
-END;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION view_error_log RETURN tab_error_log PIPELINED IS
-BEGIN
- FOR i IN 1..g_errlog.count LOOP
- PIPE ROW (g_errlog(i));!
- END LOOP;!
-END view_error_log;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-FUNCTION view_runtime_log RETURN tab_runtime_log PIPELINED IS
- v_return rec_runtime_log;!
-BEGIN
- v_return.overall_start_time := g_runlog.start_time;!
- v_return.overall_run_time := round(g_runlog.run_time, 3);!
- FOR i IN 1..g_runlog.data.count LOOP
- v_return.step := i;!
- v_return.elapsed := round(g_runlog.data(i).elapsed, 3);!
- v_return.execution := round(g_runlog.data(i).execution, 6);!
- v_return.module := g_runlog.module;!
- v_return.action^',';!'||chr(10),';'||chr(10)))
-|| to_clob(replace(' := g_runlog.data(i).action;!
- PIPE ROW (v_return);!
- END LOOP;!
-END view_runtime_log;!
-
---------------------------------------------------------------------------------------------------------------------------------
-
-BEGIN
- IF dbms_lob.istemporary(g_clob) = 0 THEN
- dbms_lob.createtemporary(g_clob, true);!
- END IF;!
-END plex;!
-/',';!'||chr(10),';'||chr(10))),utl_raw.cast_to_raw('Dummy blob for API method get_a_row: gAHxAynhaawEzVoObRjJauZiCKrUnpnirFynKzdbyJvzrKmfynRlmPCiK'),'2093-11-28 00:00:00','2020-11-16 08:40:02.322977','2020-11-16 08:40:02.322984 +00:00','2020-11-16 09:40:02.322986',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15973,'ZeOJYNR','u',453071955243,455915102297,743966.32598,27079252355292.91634,706707541109937032643141.8893153538,938564048800000000000000,'Dummy XML for API method get_a_row: EStwRRbwOJvqwidVctEsgAbWSCJyKpQAZboxaCRonJzUwuQWRcwhlXsWVCv','Dummy clob for API method get_a_row: GrxokjoWlvJPDEMcvrsjfFgvNJXuejZguOcXtoqhqZlVgJKgPkGAIbXTAUjOTNCgJln',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: sDKlReELOrbctevmLwAvjLmNCtOzLZSZMVRgPLMXSyvuyeAfKCbtwZKuxZlcDXkbMtJJpIJevwqipmsMwqtHzdUKuCJTjwyfs'),'1919-10-03 00:00:00','2020-11-16 18:03:15.016945','2020-11-16 18:03:15.016948 +00:00','2020-11-16 19:03:15.016949',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15974,'om','K',120691288825,980677584074,3405861.6965,548680255637939.86285,738165472957267440791929.65496894571,241337096300000000000000,'Dummy XML for API method get_a_row: HuPekCBElGvScYEHKnBuXcxCTvHWuLgbEJ','Dummy clob for API method get_a_row: tWkBjmnXgMrSUtALzPJFapWBeOhgpQdLzIGrwbYbjUPWNvTVJVlCugiXkRiZCQigVyJQVYnjjZb',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: lqWnjSjjwLijZpQysHHFTYniUGFsuNqgWFKUkRJzcRPvnaPNfuoCxOWGxcgefaQTRtEJGZxVZXAGzCwAAtvs'),'2008-02-18 00:00:00','2020-11-16 18:03:15.017355','2020-11-16 18:03:15.017358 +00:00','2020-11-16 19:03:15.017360',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15975,'mThrz','s',487927446788,348750425076,8906051.81384,219932643880976.64423,395835089639508514953038.027864115765,100688454400000000000000,'Dummy XML for API method get_a_row: ANiFRoJwRSHxWbWHoCmzkDZzzQPkrFAzPfFSiEptgtRDSVXgcEtwYftzdypJuKwhxMQEgMBUwEDDZxfbUJgPkuysdvbdO','Dummy clob for API method get_a_row: adGhIyhZAYJwzxcZayHWZfEuZbHrhvxbxDmLCHWgAeFgNNUZrlRAITfAFOZqtfBybvIBEzGbcNCmsZTQ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ZsqOdcDRLCwmXfcZOhSMbATyTnAtzRRnRgIIdBtGKxqXlDB'),'2006-07-07 00:00:00','2020-11-16 18:03:15.017769','2020-11-16 18:03:15.017772 +00:00','2020-11-16 19:03:15.017773',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15976,'EEATkLsfqIc','U',90894335799,566168156772,6688641.85087,91188928581229.75068,891619019426244380807761.358840311021,18429183610000000000000,'Dummy XML for API method get_a_row: VgYfIjNDUaDrFuTBcfxXQkWWyktCkXTYhAQNoNXElwXwCvvxkaGVfXDTQSitHgcCaUFtIqGOcUT','Dummy clob for API method get_a_row: gSTiLzYQvWsxSyGvuAHMQcpKmBLNvZoMpXCbRGJDCVAtSMpCqNbtxJdT',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: fwGYNcltvZkFQzwVHGjofNdPmGsiSfJCyiqTmpwQZdYdozMUhcloqxiSC'),'2097-01-21 00:00:00','2020-11-16 18:03:15.018151','2020-11-16 18:03:15.018154 +00:00','2020-11-16 19:03:15.018156',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15977,'gIv','t',143272716944,513881386323,4827408.81281,62033773689317.78052,774489203204452513226303.552464577622,864715849100000000000000,'Dummy XML for API method get_a_row: gjHRUMpjTjeXJcsVBhyzuksKhExgdsxBQkDJDmSmldfpkoRuoZYxYlvNoExxEnlkTigMPLHmLdpfYJEVd','Dummy clob for API method get_a_row: dCdtPEoBGHaEWELMCAzYhzDOdxvAjRabzhhApHjnUqPerWqsfYilVgkGzYuy',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: PdGoHEMMvAXqPDYWtHJWdmEyLizGbzLWMtJxTqDSqPWolKsasQWCgDUaLFvj'),'1913-02-18 00:00:00','2020-11-16 18:03:15.018567','2020-11-16 18:03:15.018570 +00:00','2020-11-16 19:03:15.018572',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15978,'jHugojuc','k',447563866529,608866191694,2022754.34624,291580221765461.60534,934971700135413302412805.511829803399,943397077400000000000000,'Dummy XML for API method get_a_row: DyVIHCgxYzEgXPnalwLXfmgKPvgRcAteKbDqGEggtkVGJPOVTqhujdjTuCZkDZb','Dummy clob for API method get_a_row: aHXdUUGehgdpBvgjmOMMecxFdcbJeIPUstjdjVAAXLjkZPChRlwhCZoEkzmycWzZaNSkQhjKawwEsz',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: uOYrgiEYdsWbMrzaxZCVqxmrrhtmuZazyXdeLaXDSkuxIgKHzySupldmvRdaHfXcQAGXRXdQJwSydwyqfM'),'2025-07-24 00:00:00','2020-11-16 18:03:15.018978','2020-11-16 18:03:15.018981 +00:00','2020-11-16 19:03:15.018983',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15979,'KElupHFSFvf','k',6728588844,392708694857,4963418.56688,85849806581886.90516,770118088503658079223973.333788847375,454133296700000000000000,'Dummy XML for API method get_a_row: ultTibcbeJKSjJWFHLqXTIyuwnYikWzaxZDsgOWTQQ','Dummy clob for API method get_a_row: oEBosMKxXwWDrYRBSxcCcjOLPXtZYcaMYKnmIxVGhsCRWrFLeqYwAevEcvNQolJwHJpAWmIAqfUzaUWt',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: SVYHWQAFACxieCoCsSteNLUVtvbzSxpNipvHawNKsxFRKosX'),'2047-07-04 00:00:00','2020-11-16 18:03:15.019439','2020-11-16 18:03:15.019442 +00:00','2020-11-16 19:03:15.019444',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15980,'FhiOiLQAGpOpT','r',871919758618,822153677960,926099.02333,974233594639478.6877,32659090843464450252937.38814380058,239082277800000000000000,'Dummy XML for API method get_a_row: PywYANsfnggBMYYzpCxomgtjrwWJqFHCqBGjbbqEhnraOsjhvotkiGTGuShqSzheinknAPDWpoPAYcQ','Dummy clob for API method get_a_row: kQuYLbIlTnZubYiPabOOImDlcJlHjkteibPeaqQCaKibomlPQePhPUXMZffuLCQCPpYCPyRBmwqwZoAtnB',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: yERrIHuYmtgEqAGdDlCQDbFdoJYGMgTtQTIKWkxpIfVrmDTzKrRwOGRnOpyUoOSDMpPMkESLRYIqfZdzAqCb'),'2051-12-25 00:00:00','2020-11-16 18:03:15.019909','2020-11-16 18:03:15.019912 +00:00','2020-11-16 19:03:15.019914',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15981,'heIGfLzPsUV','D',448185452157,148605843680,7456967.59061,223473253430593.51709,525877138780115285675415.301881978151,307111216000000000000000,'Dummy XML for API method get_a_row: mtfvmOfAwbAziVwvXjULgmJMNmMpaQQpVTgTtoHcnzPbqRgbGbyrNZlAgskNfvpSv','Dummy clob for API method get_a_row: TbKDXKijmWDqoUOKhoqCpCLQgYkxvigjDAUEmpLlORQZUvCRBVxfVGxAAuATtOTqWYuaJawvFG',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: JxOhhticQpdkDuVXgEeblpKAeVyMGbZoTUfiucdkisDtRuSHOEXgvRcnTMuoVHRkJJSx'),'1988-10-27 00:00:00','2020-11-16 18:03:15.020351','2020-11-16 18:03:15.020354 +00:00','2020-11-16 19:03:15.020356',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15982,'HOxiUCkcIsZWtBt','c',738976200019,644591681877,5066778.45415,440103840643854.48644,306628004590728653648955.298791257202,699133704900000000000000,'Dummy XML for API method get_a_row: UsBWqotZVLmsjfukgtiopOKtWrjpNHtbGyELqdCdEMOcgnnIfQOMeuoqjlLEvnBcKrEaJwOkGxRWCyCCHyCsChSqkQQmR','Dummy clob for API method get_a_row: GOESCpjCtlNfjhtqtrjOwyVTTuHUMaAUzKP',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: MlAvnVelZvYLiTeMkmXZJLmPPjXsvdAvStlgMNzWttfBOlhxMXuIVCjcV'),'1990-09-16 00:00:00','2020-11-16 18:03:15.020742','2020-11-16 18:03:15.020744 +00:00','2020-11-16 19:03:15.020746',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15983,'jyehsoKsuhdj','g',55440031090,519174003068,4545208.65523,939476563284890.14708,382761257694573051880205.813582969352,258956656600000000000000,'Dummy XML for API method get_a_row: HRBRfkYoRaQKsgOiDXwvPQcsaVgSWxEcppAdOFhGkIFZKxMkaXTLkpUhmijBhcRGPQoG',
+to_clob('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
+|| to_clob('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabb')
+|| to_clob('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+
+sfsf
+
+
+asf'),utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ZOiQnCNLWoHGVyqyVdNmaUqszGSETvcfKimvsOTpcXMnWiGacACLtkgZUAVHxpqhXtCOMJnxBZZwCwTbHVPN'),'2022-06-26 00:00:00','2020-11-16 18:03:15.021152','2020-11-16 18:03:15.021155 +00:00','2020-11-16 19:03:15.021156',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15984,'Efj','D',813140796467,68587387720,1995988.94586,443831977383186.64252,1935745944994137090913.250511470929,319707399000000000000000,'Dummy XML for API method get_a_row: BisuYdacHwhAAcWlVdyuNHAFEQUKxRobfvqsEhxXKMJEIFsYTC','Dummy clob for API method get_a_row: kHRUGzMFWvODmsXsFJTIfqIzVNteYSZvFjJhe',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: vOzwBJCkBJRZADJKEGUKzeRlAbeYkQzTGFGUShaKJ'),'2052-10-30 00:00:00','2020-11-16 18:03:15.021539','2020-11-16 18:03:15.021542 +00:00','2020-11-16 19:03:15.021544',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15985,'uhhceCauILw','w',802133570128,576862639337,3940077.45745,730124360873431.77187,513857476019641611936612.351165375377,42564589110000000000000,'Dummy XML for API method get_a_row: IPYuTlkUOuHFgMuQCBYgwNtPwjaGsjeSYLg','Dummy clob for API method get_a_row: SSxswhzpYrJyrCBiovTEyyALVOnnGoSzesJyiXVUEDOnlbpg',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: xXWKhZngkfCVSoCjTxaZWDszhsjaqsAMKJQVrnLcpBEpKXnWMNLysZfePGkXSotvpSrJcOLIy'),'2017-01-31 00:00:00','2020-11-16 18:03:15.021891','2020-11-16 18:03:15.021894 +00:00','2020-11-16 19:03:15.021895',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15986,'hafWt','u',479766708540,672713722252,3457625.15652,613464124598483.73453,825833605119524915640286.324093001538,506322978700000000000000,'Dummy XML for API method get_a_row: BtKcEXeTvzmlzeKsafTFBYVAJGkUkVFUkTESjmSZPUMfAExVECX','Dummy clob for API method get_a_row: PwQLzuwoskogTrEiRdSqzgkCcTWOJHBzRWfkOBHcWGFiLQNShPMEiHjrPnaJBynKGUQhsLLokXZ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: wyUKjiTsOlqhJGtPzvmdaWQDcYHSnlQfFEBzWtBPjerQa'),'1939-05-07 00:00:00','2020-11-16 18:03:15.022309','2020-11-16 18:03:15.022312 +00:00','2020-11-16 19:03:15.022314',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15987,'sHxSLupPYXbcXT','X',388486317275,804671296149,8533470.40606,627779580633837.37494,617730558653364803634975.253665212361,995487603500000000000000,'Dummy XML for API method get_a_row: ejaetBgNwjWZdiafEcgeXqdZjZXYwZFbbhbLMbDLItAGGuPcwWWDWdUOJxCqampYQylqJdrNWhkdlsBgvtbSDaqleeCnNs','Dummy clob for API method get_a_row: ZsmwPYGpTDGgHWWvFqeJdMfJvcndWWbmOTgsJzrzzAIaZxmqVILRaYtUUZZmuhbhWnZRVOvEqnjDKS',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: QlzuwuUGjsGeEhThWniruLivLwvUkqu'),'2042-03-30 00:00:00','2020-11-16 18:03:15.022717','2020-11-16 18:03:15.022719 +00:00','2020-11-16 19:03:15.022721',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15988,'YUi','C',663478878515,324166946058,3011372.74524,868233856883174.58964,81199483830858108634047.316739125412,415226659200000000000000,'Dummy XML for API method get_a_row: hdbdVayVAwchuPhkOrpRaNtjBylgmMxtLX','Dummy clob for API method get_a_row: RWSGqqNoTjPZQaGhTROljbNKInvPLTSzQhnbFFekKdSAbFTAEbjcmkAaJNVCKfnjRDAWfkRevhmLggKNPeryES',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: avIdQkRUbgTWHpkezJVnTQKnZsNBOyNKNLemQClFbAISWQoMZAfSUcNAoVfejfeos'),'2091-10-20 00:00:00','2020-11-16 18:03:15.023081','2020-11-16 18:03:15.023083 +00:00','2020-11-16 19:03:15.023085',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15989,'XsWj','K',582430015855,120240953303,8059772.41919,646789643699201.47552,971772586829014672201978.625970978666,3909215131000000000000,'Dummy XML for API method get_a_row: ssTjabKBhJRzhPuUySqOnYojelICbNyhOyOJGoqZHbXalevJwwEUWoiXdblCpJjvIfJoDluGtNoZCjtbiMXxChEsaAMvxZVQGg','Dummy clob for API method get_a_row: pQpPqKttZYbyMoJzrqnnjfVkBLPXAuDOSZJRsGRXaJDEPJLmoN',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: zmCzqbFnrExIsxkQEuaXRArryphXpYYXnwCFuewIwD'),'1998-05-29 00:00:00','2020-11-16 18:03:15.023489','2020-11-16 18:03:15.023492 +00:00','2020-11-16 19:03:15.023494',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15990,'XuTIJ','j',74565156275,770992518425,1006610.23343,16505100577280.80518,970058563235929023284084.210087322026,535032730500000000000000,'Dummy XML for API method get_a_row: WfAeKeBAOmcgZByznouLAIYQadeZVPgZluJGnyDnCAbtKIjWsiQBGAAxJeDfthZzhlnMzCnqoVEKQH','Dummy clob for API method get_a_row: TLuacPhWuYMlhgdnjlOFJKWNhDVLXHoQUZeHJPwuFyYtffaaajKUbdABPPmzXVnPxrtqvZhpjnzpqxnHnfgy',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: pRkoRHgkjJDpSjbFHPKWJJRaoIDvTyILFzmIBWgIrsZFjQvFCSKopQMdanjkGowoJpxTGHOzIjcsaNfq'),'2004-04-12 00:00:00','2020-11-16 18:03:15.023907','2020-11-16 18:03:15.023910 +00:00','2020-11-16 19:03:15.023912',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15991,'jJOUo','m',431580933335,864458030654,1405869.24993,209709625004651.20457,547689388554191615494363.286037702139,955183213200000000000000,'Dummy XML for API method get_a_row: iWYpYJELBmhQdsUCATtVJkUwMqaRjL','Dummy clob for API method get_a_row: rGAiyWjCczRZsNJinqmcUNSwvNzGIVDCHmPOAcWeAlSNWtDjCdDlxevmTzoGsnEkmhotpfMnbFqqGVfxqCrFAzpbmEVtPbOmSGG',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ZPXditcEAbkKCgLsmtLZlJmEGbatLwCglDbZvUJAaZmokh'),'2046-07-22 00:00:00','2020-11-16 18:03:15.024290','2020-11-16 18:03:15.024293 +00:00','2020-11-16 19:03:15.024295',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15992,'Ua','D',313552024887,864509991332,3252656.38419,617596292485239.92465,834437957108148400854054.805736081939,951920871500000000000000,'Dummy XML for API method get_a_row: uqfkmeLkxAVtMTyNWqYGbBmwcpTMdAyTlztmFlWmlCfOnYZZHRXHtjUWfywPf','Dummy clob for API method get_a_row: DjzPfSEUAHtDVPZMWjHrUWkSqRyqBkvaVlSLhssahAVt',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: SvqFnqRlPdtAxGhDzuWsLPDHSmEjclrpgJvEoInAYTWiYtksnwZMkwflivpPbI'),'2002-10-16 00:00:00','2020-11-16 18:03:15.024723','2020-11-16 18:03:15.024726 +00:00','2020-11-16 19:03:15.024728',NULL,NULL,NULL)
+select * from dual;
+insert all
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15993,'mpFmOVDYOtbjIn','G',677085108364,575263258041,9220335.93238,244456325798605.53572,646992891666651329148742.581217966282,442184225900000000000000,'Dummy XML for API method get_a_row: OElTPQOwLJcVmOoQBpBwtkfrRYlcJfBKrbZCfjAkXVwWXbQIYfsFRCSgdXvYwPHDkB','Dummy clob for API method get_a_row: RxoBZLxSQLvAqEdhaiUrVyVbbzInIXToUQRikcKVdyTXhAdzekzYiXytwwoii',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: HlcNiahoDEgnOCzzaGjHMruShRNGQSuRGGMBxOphEKYNbiWZzgEAZd'),'2038-01-08 00:00:00','2020-11-16 18:03:15.025111','2020-11-16 18:03:15.025114 +00:00','2020-11-16 19:03:15.025116',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15994,'CqUytbGKLspM','o',624198768956,603006420126,3313252.72813,147431723246139.89355,397757874775457226452086.242437336908,754413772400000000000000,'Dummy XML for API method get_a_row: RrhyRHpweHJwgArqvrPDNasWDERoYoyvbWBIcoqGNUHZpEHkYuUVufwUwymqvorF','Dummy clob for API method get_a_row: LEJohwJLXcCeAHbzlJTUvQXVnyYdiMrfMidmEtjRwXZgDwvkvJPjHdzyDhRPIAqjKgQEALR',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: hsAyMTGjIoNpprePQvCMuaBHEpkEHNScCQiUxGiLVeFysVzbbSQvlTqlilDTgZMKEvKnxMbmaHKn'),'2084-01-12 00:00:00','2020-11-16 18:03:15.025641','2020-11-16 18:03:15.025645 +00:00','2020-11-16 19:03:15.025647',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15995,'i','H',33850432345,5061868434,8606712.21746,623047212522526.43759,175006795183245365853842.547916979035,274447177600000000000000,'Dummy XML for API method get_a_row: BmnefvWaaPlqiaNBabihUZRpmDLNiavFixRcIxMAXvddbviidjaAigaopzrNVSgINCTqYZCyXMLvUAY','Dummy clob for API method get_a_row: mmNQGWuYwIqePtJlywTzVkgAvlwDgyEclFdcoahJLJUoTMjVJfvq',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ERiYJTmUyBhNTGETquJGonowPWFRrtRDVLJPxPJYirYdbsmCdfPTjfhUnnpBNEYTMrdRWNsYmijPgbzt'),'1908-05-07 00:00:00','2020-11-16 18:03:15.026054','2020-11-16 18:03:15.026058 +00:00','2020-11-16 19:03:15.026059',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15996,'kbZzXJz','Q',200363022531,381894183825,6413772.645,863351790716691.02973,900704674054791842292798.024748867429,676232119000000000000000,'Dummy XML for API method get_a_row: uxFfbQNyiPHhNqIZdmDvdLqtbqulTVkdN','Dummy clob for API method get_a_row: HaJPTTrggkzHYuxWcWGZvVozRulycvBOHXGbtUTjgdTOoYNXHaugzBlYUvOwPsuoIFiSOQGJzankuBXZ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: gecxmmcTUXJMNXoiCgCoThHAiQuDIxpcsYNehQbZGbaedyicUmjVEgVPuW'),'1903-07-16 00:00:00','2020-11-16 18:03:15.026581','2020-11-16 18:03:15.026584 +00:00','2020-11-16 19:03:15.026586',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15997,'jSvMwWqvoQIIHd','x',607541796289,804965702459,5551867.3226,67197585645260.85143,57406742155536856829780.179614286529,564537184000000000000000,'Dummy XML for API method get_a_row: MdKsnvNYQiXmDxRZRPrlcPCTjWxTxAaHNcozskPMWovMFurPuhOfSfswAILlvoge','Dummy clob for API method get_a_row: LmvhhloDmxhKujeDMzQfSDOlzkoYvqizhHmbdExTLNdZb',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: DUKBbHkswLXjFdbWDUFUmXncXXMuFufRFKmPfgjeLFrsEEaAoQhPwPDbsXvgBPKCWKz'),'2042-02-07 00:00:00','2020-11-16 18:03:15.026984','2020-11-16 18:03:15.026987 +00:00','2020-11-16 19:03:15.026989',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15998,'LBO','w',235680868278,830335660741,5389790.37184,271314586760544.46141,562575385243481331776075.368206946771,216333318900000000000000,'Dummy XML for API method get_a_row: uJBJisyiivgvuhiPqdNQcPNMtGYdgmgSFhLxDAEsvREFiwpmpFsqsYBoQamPffAodstyimIlvSWKMCzjMRTZ','Dummy clob for API method get_a_row: iGWIyNjgFgZKxEQjxYkXOBFbBXcrGoqNGKmqGhOroKFPa',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: vAXTjfUenjezzECZtLqLBDlfblipnpdAbZrMWbTdxkJlvIGIDfVGTLHXlGJWVxfOIVL'),'1985-03-07 00:00:00','2020-11-16 18:03:15.027403','2020-11-16 18:03:15.027406 +00:00','2020-11-16 19:03:15.027408',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (15999,'VDqwAwwLsn','R',89280304822,928933152695,1249351.87098,22212663874518.35601,693715024134505069123977.489253934803,471635168200000000000000,'Dummy XML for API method get_a_row: fAjsZzsFGUHbdJzAgSCeEuDDLFdWhEcoWuOFUvwDVDXpCmgxW','Dummy clob for API method get_a_row: lFebRrGMOHDVtdPVgyFvEBVaUGhjBiFObMfufdGcMYRqgkZEoHikysaFLMKSZLbpTjPZGVysWXmklvfIOQTAafUmYqMFphSfHgQ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: GXwKeUVknFOZceSArvcsZcfvDQYeDCXrSbTtkokOkjMBUfFgduYgJviJnVoiWsbFghSNTDObepuuIlbhLxK'),'1950-05-03 00:00:00','2020-11-16 18:03:15.027847','2020-11-16 18:03:15.027850 +00:00','2020-11-16 19:03:15.027851',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16000,'GBFxIcHhMURRfO','j',398820902582,145226088514,1585595.37939,695705177530455.71833,359686692053211210184144.543662393383,525477698300000000000000,'Dummy XML for API method get_a_row: gKqySzvUzcLequUBPjsvUIirFjpvPmedRrEPIXbhpgvHajpyDzEFbK','Dummy clob for API method get_a_row: mugtimayQUQtySwiEPnDvsYpJjtArwnQLXyyuyaxKw',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: GtgYDTnHATiywdZuZiNObsOstRXgOLcJoYwtcWBAKemMoxsYcMoZCKhzKDEReQRprfrZAaukNAbQqGQVdLGRW'),'1940-05-16 00:00:00','2020-11-16 18:03:15.028335','2020-11-16 18:03:15.028339 +00:00','2020-11-16 19:03:15.028341',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16001,'zbA','H',756111480987,356849604216,8061824.14996,46682434121150.93969,191009012462018271049106.76721820887,581880336700000000000000,'Dummy XML for API method get_a_row: pYmIqMQqtRyVoPKjAaaoTfDgntkmXeNFOtZLqbwKnJenqLuIOteWphSdRXvNrdwHKYherGuojEcKrxpCm','Dummy clob for API method get_a_row: INLfjfQVZhFsSxhLSiSowyxGgheHfDmEaCJfnbuGLwzMlRPusJ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: lAjWpuqnOjDazkOYGYbReeRBiPNBZrQtfnIuVtwtXeUGvKXTKthYXbnUPxXPmGgtXMVUdKReDwXappUsJ'),'2080-03-15 00:00:00','2020-11-16 18:03:15.028789','2020-11-16 18:03:15.028792 +00:00','2020-11-16 19:03:15.028794',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16002,'wTDNvkgJ','A',565577816335,763999862308,8963010.92491,826647286746858.57851,806857087341797342873041.82316678942,519656083500000000000000,'Dummy XML for API method get_a_row: VpxOpEyMRINYsxLFKupHsecdoFYumyzLeSHzzYJkLaTddVMLXcCjUDCKvWIcDxXw','Dummy clob for API method get_a_row: UXsVUpWVIlVzooMibdHBCVZoPbDWggmurVzqChslnFUrrWdxmjFAsVOjzvsBWIPAG',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: qrWFUOibturDlCLIWZCAerQrrZqImtZKjObxMVLzujZzlKEOaZJurWLhQN'),'1952-06-21 00:00:00','2020-11-16 18:03:15.029175','2020-11-16 18:03:15.029177 +00:00','2020-11-16 19:03:15.029179',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16003,'IIm','I',355145738392,11479538526,9500389.70253,450968352430931.69258,446218827523767409163843.324020333793,152082706800000000000000,'Dummy XML for API method get_a_row: JbzQCUFSyzCeQlszboDUeybCCZxJiMfkBIKtrRAPMQkYufcjHERBV','Dummy clob for API method get_a_row: TLBxZkglCzINYHDtOnFotYdEmJeOKDwzvCFkdYDDOVeJgxYrXMtLZzoFVfLkndlyCOyCgGwdIjxZVC',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: JWXakDkFRhRVRBoBQjcLMEUVgwrkvBkOrDmVqNqPkgTThvyusMJmaWRpSOKgEVUIlDqIOfRAPvfuzTPYIAXVYBEKRwBviKY'),'1981-03-18 00:00:00','2020-11-16 18:03:15.029618','2020-11-16 18:03:15.029621 +00:00','2020-11-16 19:03:15.029623',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16004,'JcwaPvIIogZ','g',261599573615,534039071905,2982773.37117,652101568187991.40384,38682324213589521399576.107303041007,560529202000000000000000,'Dummy XML for API method get_a_row: YTCArExqqVAFIqajKgQpDvOiRmheDYFjrYlBgtRGRINwWAYrusFlxrFqFkfvd','Dummy clob for API method get_a_row: ZhulGpkspcpemZwnaMfmPBQKZxIRwKwroL',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: UmHsOTjXrKuefCkWvwtNzfCCDzhjdnjyYgpBuvCeavuqcifMsDKqTNwXlocrHTWQrjfaynAWroEbOhPwCsaxBgWJVRsB'),'1958-01-15 00:00:00','2020-11-16 18:03:15.030011','2020-11-16 18:03:15.030014 +00:00','2020-11-16 19:03:15.030016',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16005,'uSfaRaWg','k',840981154406,293167392796,3506641.5684,658581657675335.03594,917298893265429513555908.420747524289,239939067800000000000000,'Dummy XML for API method get_a_row: ngCoIzsZNBYcNMvpWPVBkOyguHsfxtqxBUhKPRUggztnibZHGkTSJLAin','Dummy clob for API method get_a_row: TFtjXPWFncePVDOOpTpYoBsMyGEqfpPAQIBrvDFgPMruLVzIlzjojfHRMxaCElGDkfHRGTvEfhSzWrVkGofOVWSdFbuAo',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: kzryLSovNRgCnFXcCTlFRaIZhqGBRvffEXfeRLmiBnqTU'),'2074-10-17 00:00:00','2020-11-16 18:03:15.030415','2020-11-16 18:03:15.030418 +00:00','2020-11-16 19:03:15.030420',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16006,'UxrgMawkRqxzcNT','S',779959978236,235931861766,6325536.68838,106849757612595.06287,330941764372716336134238.495060662648,206392162600000000000000,'Dummy XML for API method get_a_row: DHcYmTHuehmNrsPxuUfHffNBqzXYlEKYETEyuEewXkNUG','Dummy clob for API method get_a_row: XMJrokwYMtHzxXYRSiBrMmwutSFtclPkNzrLJicWSLTBWSWxfYbZGCeQfOkQVLJatyLGGAoluUtiET',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: YrhSiotBtOccfulxLKeIcSKiZtVILVWoWvDzKFKTHanmAllwEyCLXdaxkCbuJQqPKfbpAvQTkRudEwferXTizxmHye'),'2074-07-16 00:00:00','2020-11-16 18:03:15.030837','2020-11-16 18:03:15.030840 +00:00','2020-11-16 19:03:15.030842',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16007,'WAjRGO','A',645052511296,44317001079,3192389.91467,798685677338474.00737,306165862921321930059401.582049497235,937160061700000000000000,'Dummy XML for API method get_a_row: caGccZudJOcXIKUJWwAlrfWemywTHUILaEOjYZWdkdGaQjkXeCCgvTSOZCwjuCokSrGhjrmHaGMHPHBQByADn','Dummy clob for API method get_a_row: ZzHKTScKNDVNHAaXeEJOoKaUeaBwnheNkaCZzMBALvUUHpfgUKNoONvEaIHGzGYxeY',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: HMcYqAdiwAFBzlOlBuZRKjKgzSaypTHbURDWVovlOTwDMXsIugqINiTGeCXgUlKQRJYUaKWQNWVXGCotyQG'),'1912-04-14 00:00:00','2020-11-16 18:03:15.031270','2020-11-16 18:03:15.031273 +00:00','2020-11-16 19:03:15.031275',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16008,'bh','U',518380061054,60194331677,8007349.18581,505965560789280.69939,108942336778592384307164.24077752405,28279781640000000000000,'Dummy XML for API method get_a_row: cUYnhPYHCLfTlIzdTejWMrPmkbKAPXwqrtKnSNBBcmWnkhcnEmMnxQSMviownUytFqHDVBevQ','Dummy clob for API method get_a_row: JwZrapNWoNoODnczkFhzuhddqFjGjVsWkXIsCJ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: cKcjBghprIDAZdukACIyJLGsYkwHFwhbuhRAb'),'1958-03-16 00:00:00','2020-11-16 18:03:15.031644','2020-11-16 18:03:15.031648 +00:00','2020-11-16 19:03:15.031649',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16009,'VzJkfM','c',434089468785,746412519719,6208285.26008,119905612127786.2543,41231799422376786458591.981360116468,261967723200000000000000,'Dummy XML for API method get_a_row: xAuYrGdPRlqVBBsNFAMteWbjPLQDJSMfcpGIHFekGqflhFeiWzZk','Dummy clob for API method get_a_row: pzNLLcAZqutaxeJGWyLqrfLbGRlKqniIMsoAiJgwZehnJvncduNqEvAvQzWBPii',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: nhbfnqCvcteBazEjLzBuiiEcrKCysOyMM'),'1932-09-13 00:00:00','2020-11-16 18:03:15.031982','2020-11-16 18:03:15.031984 +00:00','2020-11-16 19:03:15.031986',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16010,'xlqXGn','r',589564317976,896350763317,907879.79949,605352050158828.11527,536381635941058004648122.06946689893,967141083700000000000000,'Dummy XML for API method get_a_row: wyRmffrddgFBIpBxyLpcpyqsZdnjEqhzwKBdrEmxdqsgvooqqkgVaoQVbFWjV','Dummy clob for API method get_a_row: caqGfztnucCiIknfjPNUFeexVYPXNMdPXUxXfocjSsSpGNTzlpZbOzWxyGesMWDS',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: zFoZQOCIgJLsyxGNpycMANWbbPsKgBPsYdfeiBuWjmHyUEMwdUYWQoYbVgjwQSAEmqXhzAkZljLURiXEkRhwqoTtJPazUubV'),'2011-05-10 00:00:00','2020-11-16 18:03:15.032460','2020-11-16 18:03:15.032463 +00:00','2020-11-16 19:03:15.032465',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16011,'fTFwVOEjr','X',927135197456,615388745033,1168643.56734,948755469224297.77511,339439768530358113389714.284210938494,865459871400000000000000,'Dummy XML for API method get_a_row: GUywFxgTvLvONqnWftToAZeNkzzGgTGaPZSicMm','Dummy clob for API method get_a_row: HQdSafECpzuyqXUrUxCmRmtKkNxqCZX',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: JwGbEjPazuFXraSjXUVuygLsdaIdFcozvBavHkRTsIKJMLuHhSkBGjfnWPFJMEZuvfSyKjCPcfDLsFzLss'),'2019-07-14 00:00:00','2020-11-16 18:03:15.032816','2020-11-16 18:03:15.032819 +00:00','2020-11-16 19:03:15.032821',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16012,'LTmS','f',89410448766,369017482803,7775943.47618,822594795956262.76731,271606968046394219928728.21274895233,769188619100000000000000,'Dummy XML for API method get_a_row: dHXvxXKxnMyoeyOIkUXYMNMLXRzaQDQIKinCWWpgrJAylhYQZqMCbAyAZWVNabGyulrBVEocdYWxukbwILd','Dummy clob for API method get_a_row: DOJkEIQxxwfmusAHlNsCPjAVkaxhiyGeqPiztIzTAUOXQXEgxUzXvdNopHRnHWbnLNmoAzamhHafGFBivxFdcUSfWA',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: BfaGMhAMRXfSfcaCBjPXkEXQjquTiOZpgahzPHmwdkUOXXIfLjpQaXDkWUavwZBxxMRujMzfUjlIbfvvaj'),'2036-04-25 00:00:00','2020-11-16 18:03:15.033304','2020-11-16 18:03:15.033309 +00:00','2020-11-16 19:03:15.033312',NULL,NULL,NULL)
+select * from dual;
+insert all
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16013,'lcZC','H',899994379748,216547391286,6422651.31897,781974531335809.14658,889534748124722670667511.984372425385,530614320400000000000000,'Dummy XML for API method get_a_row: lIHkILgTbYCCyfxEJFhBbAsTMFRBtHRVtPLnGbuKHLobFzzRAsjQuURyOYlBSxpVnNqFGrPRRVdhzslMyASobiUIowpYYkgv','Dummy clob for API method get_a_row: egMrPiROMxuNCLMZDqugJdbKfefbvMqAJtqHTeNNPiokfVNAfTEtJWjJKrSKuIOV',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: kUVpamTYjRpyoKLxkVFjaJUlJSOmciHTJGUvzTECWjILtUIcnQeiYqdtnkcCVartXKuoePAGENuTecNwisVAYkMx'),'2065-09-20 00:00:00','2020-11-16 18:03:15.033830','2020-11-16 18:03:15.033833 +00:00','2020-11-16 19:03:15.033835',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16014,'xUuwvttDAYkIis','Y',44871616943,69579815663,3566520.4024,827243872582717.46021,821972563034595940845187.181634893353,428443699400000000000000,'Dummy XML for API method get_a_row: xCuKEqOHsJYLvAxRvsPkwpMRXErbDTUvAPFAmIAvJwvEjpvUuSDnfjuVHllIJjCtYdMiI','Dummy clob for API method get_a_row: MFoKpfeIlSXvPjCPQIAqJwrDoiaImroHZjdsTKrgnegArMyTBZUVeABBnPTbXTPKBAniutvDmhrAIpWpIvdQspJMywUrdGrofU',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: mGuXnHMWmqXrwKwsQIZXzxIaXAnsSCbnPjtdPHzDiNAIItNHmfPoddJJHhPFJnJBaRVLRwvzWZgIrV'),'2029-12-01 00:00:00','2020-11-16 18:03:15.034377','2020-11-16 18:03:15.034382 +00:00','2020-11-16 19:03:15.034384',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16015,'gChv','l',941193909472,428767369184,3329896.54986,174115159229680.61714,687355388197116369465690.184364188428,489277427100000000000000,'Dummy XML for API method get_a_row: JFJeVUapIGIFvxUyrUnjwBpZGYraElNFAIBvBjheoSmxeQecRKAFlOUPdBFaGovJPJAwgBdgnahaRTCXisgpziVeJGVHXc','Dummy clob for API method get_a_row: DcmuKRHIEkigCiWnLtlQGWQnYQVDEeRjPNbljbKbSbMsiFIqDrlNutccsIyOwZsUxKSlJhOeUyIobZdcHHRy',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: tMIVaAfBDvQlfesmXUYpuBVSGEAQPNUTEcTkTRLlKvGdngOwyAxBTTqzQImqNAU'),'1932-08-16 00:00:00','2020-11-16 18:03:15.034903','2020-11-16 18:03:15.034906 +00:00','2020-11-16 19:03:15.034908',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16016,'jVywDYhP','T',643901745123,665369775261,6920682.30413,281012759295194.76765,91438517865174902131310.946185771244,101200717900000000000000,'Dummy XML for API method get_a_row: SihLTVlFagSftjebbjkmdOeQjBDFEWGEZvMneKovfOjSRuFvQSWsTkOBklQXrsJzceTYtTXHyTFvIkMAUaxXGVFJgdLWCyvHt','Dummy clob for API method get_a_row: qLNdCOmbncVaBFLOvyNPJIHeuwRSOrWvG',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: OOOHClzbvHPsrGUQNEPBhkHfwRGIXtyjpQMOAvZJXYAzlOMfXesDgNCKfVPZf'),'2095-04-09 00:00:00','2020-11-16 18:03:15.035440','2020-11-16 18:03:15.035443 +00:00','2020-11-16 19:03:15.035445',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16017,'lYbG','C',887956428063,493492084944,7045670.77723,557833687336096.61626,307553053534909532975207.620915450239,24847051890000000000000,'Dummy XML for API method get_a_row: zULTvzLDHBtVmbofukuvAGsoJmQAuuWghNdbUbdmAEGKDuXweUgdWtHI','Dummy clob for API method get_a_row: bTpthkpPXwGCSSuoBGEBPknGwdQndpopxQNIOcP',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: CRGMprSVmhYJrwNXxGgLZdEUMULguKPEXKOFbGciKpwUlBMuWuUnFUvPlStkBiZJsmO'),'1973-05-25 00:00:00','2020-11-16 18:03:15.035873','2020-11-16 18:03:15.035876 +00:00','2020-11-16 19:03:15.035877',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16018,'pG','v',569546551567,617016935602,2080698.80198,595562247594674.5433,343575053470856452980249.445134336869,290936383700000000000000,'Dummy XML for API method get_a_row: PgTzfLTJdHpdpCsCcLnorTCSYAykmLzByMkgutTVuEwsrzLXoUzVlRCogSkSWTKcUaJjvLYWQkgiSN','Dummy clob for API method get_a_row: NUxGXcBpffUyRMdxOfFbnKjuFEfEDfsBAPrpzVzHzvIBIpWkvqIWdxkSYcLbIuqguMoRhdFOaOdwAFeAunbgcdU',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: sCRIPqotHxSqTbzVElSeCPSSQmIlXLFmOGZxUtIhMvmUheVyZuKfsnrIpZtnBtgW'),'1914-04-01 00:00:00','2020-11-16 18:03:15.036304','2020-11-16 18:03:15.036307 +00:00','2020-11-16 19:03:15.036309',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16019,'ooVHCQhFyktoR','h',372407201695,332713575040,3168482.5519,966863977139554.60509,949381730009351942951973.629532825582,917756483800000000000000,'Dummy XML for API method get_a_row: gTlWnoDPnbIClYPGAJQmbJyWtKEArcajLZLI','Dummy clob for API method get_a_row: GgVhHneNhwhchCaGubZepXeRdzzAULhfwbhQDQoqvEWsGaxWBJpPimNkgUhbyMsdYPtkTOwpfvWwxbofIoPCxvPcwPsBchT',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: TPdZpuMhEMLfOBPpJxdwHHGUemmwwQIzLAWmVAMNBbhMweRFMWxkoZny'),'1907-08-16 00:00:00','2020-11-16 18:03:15.036653','2020-11-16 18:03:15.036655 +00:00','2020-11-16 19:03:15.036657',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16020,'WlKVg','M',640448965064,347468266842,6971490.15961,52057167848877.81344,542923663371410546845802.26691338481,45030735240000000000000,'Dummy XML for API method get_a_row: YLIEmYarIkgkpwxNQsXfVtcNIzwzHUPlhGoaxNpKACVz','Dummy clob for API method get_a_row: ecdZpQYVfYhLFDtspcqrULnKnXRutfnYFqhpMYcznStLsUqDSArWhn',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: SAuTjvLtkOOBScWrdvjCMgdOFYIRbTPqGlBZIkWkChueUrihOkujNRqYYClKPbkqzQaa'),'1947-03-20 00:00:00','2020-11-16 18:03:15.037031','2020-11-16 18:03:15.037034 +00:00','2020-11-16 19:03:15.037036',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16021,'cgceggXMwUJDA','k',113451789555,277117136672,5949111.11956,766863141104480.5871,749010571579275550923969.988842859148,698960241800000000000000,'Dummy XML for API method get_a_row: LGbCxVEgkKOrPbQkdmsiFmzAhyVnDLyXzDjaAlNHWKLZeRZOsGNtZkYtFwqBgD','Dummy clob for API method get_a_row: jNyRQNdsAxDHkDZPZFjhcvXREAachpRrkIdp',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: uSOpJUecJnSKfYdcbVoNYuyDvjkFgxcxsePPDMEFKkPgyGJRngxgXnvpCzuqSHaBRiZjkihmFEuWAIUiQimDlYnud'),'1938-10-26 00:00:00','2020-11-16 18:03:15.037446','2020-11-16 18:03:15.037449 +00:00','2020-11-16 19:03:15.037451',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16022,'VT','H',542329598574,346883716416,7783099.28843,307740690279931.99946,673975555319262963805049.861426084101,788753793400000000000000,'Dummy XML for API method get_a_row: DskrDXwQYShhuDfNwuseFDNoOXsKFpzXbBapbhoLNLrzZysDXKTVmCfRQdBJNvozTHWVkTZJGjefCGrlhLfssfpr','Dummy clob for API method get_a_row: cypccLgTOVKSSMdtxApJXCyohBFbdqxkVKNwkqZxzpVYEObIgiBDspTKAvDFBeDkgXODCCr',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: qKhcRZxOkHeVgRuWFRCmVcifMjcHQSFWsjfJOQYkCibiwxGmpQpXeZbCuKjhsClcqJfviTHIzdURaoRBASfvsgZntOrHTKN'),'2072-04-20 00:00:00','2020-11-16 18:03:15.037821','2020-11-16 18:03:15.037824 +00:00','2020-11-16 19:03:15.037826',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16023,'GdeQOuouKoEOs','v',545056510429,277931089195,5627882.68869,701900773996914.88989,676771493398144046704841.251728807528,222238127000000000000000,'Dummy XML for API method get_a_row: kXWCBdVArkyvqDLqvcUAGYeiVcUrCVdcPdfgujvffIkvRDvrFidr','Dummy clob for API method get_a_row: qyFAruEzydGOdblmGWblEwYcaZbLyiLMciPUZktiZ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: tmLhEKRSrmZPlQYhMpdPLbMViDLeVfIUYPdcnsrSyYywcBQbJCAEKlHcqXLZqamPCDsYIQzKNbModcxsG'),'1948-11-01 00:00:00','2020-11-16 18:03:15.038239','2020-11-16 18:03:15.038242 +00:00','2020-11-16 19:03:15.038244',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16024,'fRQwOmoCdSe','A',522050516958,814726049092,4020956.7691,716299016607401.26668,346003206201556246285491.495798641268,296996520600000000000000,'Dummy XML for API method get_a_row: XeMtnOFUwjvEIqjeosuCbvhKoRhZvsjPkZcSgVRLWkHlJOLpTkXMNwwLvtSiHpjhJXXoMApLcCokJszHC','Dummy clob for API method get_a_row: lIogbgTvAnLAtgIeaVPBAvmMwXpwTyyEqvVK',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: cTXcXBirkgPGZuADpQifecueRzrjgLHJbCCtRksgTbCwkxWnP'),'2047-10-20 00:00:00','2020-11-16 18:03:15.038751','2020-11-16 18:03:15.038755 +00:00','2020-11-16 19:03:15.038757',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16025,'ayFsuSP','E',260973909202,811205461590,176128.62362,227502700708059.00538,685960403231272379493980.768116945728,340386770500000000000000,'Dummy XML for API method get_a_row: qftjJrkcOZRSglNJeRzDtSOyeatrDsCnPqGxGXzoXWLbEcVjeqEFBgxVGmbMkmPdQXPnJMyCnKfyvjhJQyxFYAIVdhJrKPSntaPN','Dummy clob for API method get_a_row: TlSBkEwPfeWlZSJmYytEZfTbQqglvLkDTbRjBBofmsOGbAxnQhyAugRjcymgQhTyFoUaTySKqILBfQPhXflqsC',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: vaEPRjIesgjhvyPxHpJBawgRAeYWIkGuftjsDGwDXrsxefMoNonQpjEwEclaUPZYaSazFMAfhCyFctFNSLm'),'2091-06-30 00:00:00','2020-11-16 18:03:15.039167','2020-11-16 18:03:15.039170 +00:00','2020-11-16 19:03:15.039172',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16026,'LqkWUT','V',420087897913,526403970871,9669907.39021,200583779428615.25625,364616519134488317425201.266067283693,931666110100000000000000,'Dummy XML for API method get_a_row: rNUuqmWRdKJXoXYoaPIwntWaicdrVvpUHaHJxIPxWAHLsrLwlkuyMTKZpylLhLlkkRgmgnmwQQHgliW','Dummy clob for API method get_a_row: MYphOAtwZtVfUAiHRnxZfxsBACexBhtBXbtvMfhKLBRBoUDiDFFQgPVMb',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: fPinywVOaggPRdpPaTSwjDIkOhxPOzvZLuTgGgPshUkULsUfkyLFQjEux'),'2019-09-19 00:00:00','2020-11-16 18:03:15.039612','2020-11-16 18:03:15.039615 +00:00','2020-11-16 19:03:15.039616',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16027,'Mv','n',734520275714,519063296304,9876559.88652,924661201585898.66878,454286596399003941060107.341108207551,198562971500000000000000,'Dummy XML for API method get_a_row: HIoDRvwdQygJUejATJZVsCyDeIUgsVxcoYCdA','Dummy clob for API method get_a_row: NUseoXrfRGvAVpaIImQIjJQuFEXimVrwUMnNtkhPKZJpVSeG',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: FhlmRISYQNasiblSjNOZHYSMaxFcvBUJEUZmzOscBnlTIBcJXD'),'2080-06-08 00:00:00','2020-11-16 18:03:15.039964','2020-11-16 18:03:15.039967 +00:00','2020-11-16 19:03:15.039969',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16028,'CYbferOM','n',646109994447,397815622055,6620159.50566,991401667644491.31991,609057600916453326872229.640359858264,665206520300000000000000,'Dummy XML for API method get_a_row: evkBAsQavVxBACyZwojMozICaxjnRBzgYtZDnqcTxcfsRKijVDunfrsFsTpRuPGTOWFnsattQPEFKrmwAebxtrl','Dummy clob for API method get_a_row: MOVhGjnLykfJlccmSzsqjeBtyQOnHsjbkaVzKgEPzkPwUPjTeUnc',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: nJLfkUObWnjLAJwJhCSjImDtlMckCPegsmQLpNmDszLlYsdxmmNcafQZWnPmj'),'2072-06-15 00:00:00','2020-11-16 18:03:15.040337','2020-11-16 18:03:15.040340 +00:00','2020-11-16 19:03:15.040342',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16029,'PaA','q',438547929054,661488580048,2381349.87627,504429480023615.0779,52821515476642701774973.848691294329,582182407700000000000000,'Dummy XML for API method get_a_row: gfgqXzqMcvvFPagxZGuSSzibvapXpQiIFMHwVdcPenNeAgUPdcfsCMwbGW','Dummy clob for API method get_a_row: MPZVhHCCkEINEuIxTgCrYDUPrdfkLjVJlCyxmqPPEphUXlcLi',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: nAKreEtEGtqXLWHHKrkXNYVkLwpxbasTkWazNeHEqdObmMwsLIJ'),'2061-11-25 00:00:00','2020-11-16 18:03:15.040718','2020-11-16 18:03:15.040721 +00:00','2020-11-16 19:03:15.040723',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16030,'EAzwzpFflYq','R',448220266825,484763308711,212804.77342,285701781490641.25126,225755338735203697751541.816043375033,21963401000000000000000,'Dummy XML for API method get_a_row: zyzkRcWEynLesTgVQFsQfvGulAnbItfHHpUVdWAxdRJerXlhcSRuGIPkz','Dummy clob for API method get_a_row: LZWCLGdgAVphTtXCvXSscOSEVOBvrHcfvzYMDGyJAgEFbzUMRZAsyRrhoXxDNFLvUOtXzVMwDXxDNmRnoC',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: qYUMjWWPQMKFVuycaUgJVwyvMEJUcZkulaYfrkJoMfRRyVaeiTbJlAjDcdhMvGKCmikMfHQnAyaUSZavXkd'),'1953-08-15 00:00:00','2020-11-16 18:03:15.041121','2020-11-16 18:03:15.041125 +00:00','2020-11-16 19:03:15.041126',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16031,'TyODGsmr','q',972905439769,270232835124,403940.57775,591915592001108.70801,581975702766685182487168.369095090861,567013931000000000000000,'Dummy XML for API method get_a_row: RjRBdDaJzAOLaVaIQqoczXbHlOAFyvQsepmHRAdxOSRTISbHoCeeBEzDxSHczqCeqBSsWDFfIGvIpDPaRfkzAQvcH','Dummy clob for API method get_a_row: jQrfbETkLeVhnxIanqHOdOxrcAGyGxvCJNjhkcqHnLkCYaGXqIeZrFlLRydiCOmUsFOXZziaBsQCoDPSIlXyCgOaLMPm',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: cbfQzZxZoyrBvbgIBeajBgFvAuESeJQbJGRrqzOrOKKhzeLisAvOwrmdWkidjOAxFJslbuAPokQBKRdtvzgaBCFg'),'2065-11-13 00:00:00','2020-11-16 18:03:15.041544','2020-11-16 18:03:15.041546 +00:00','2020-11-16 19:03:15.041548',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16032,'V','O',285981164205,799243735253,3778476.31362,373210924564274.37301,59646579902766881228305.366768852746,364252722700000000000000,'Dummy XML for API method get_a_row: YMxhkMPGJQXRkOEkQFewJOLpJqjHnjcidbbgMvhKScybPZKeUTQcReRhCgpYwspmryy','Dummy clob for API method get_a_row: KlvjicXYoVUdJzkEOtQgIQEJnXxKbwYZLFODvoBFzlLMgadKmGSAPCFyItuJYvyzbjhFnmKNfbsoqhTZdQLqzdYTyJNUkAEa',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: sRUMnYShLpFkZYlJFAYZXSZtuZXnPoBUJIDVssLbAwkDxFIPNsKXXAOmrrz'),'1910-08-17 00:00:00','2020-11-16 18:03:15.041955','2020-11-16 18:03:15.041958 +00:00','2020-11-16 19:03:15.041959',NULL,NULL,NULL)
+select * from dual;
+insert all
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16033,'TCUyJ','R',320233181527,940576447315,7219999.70233,123243051548718.02849,931274144671222273530790.961417150719,159605914800000000000000,'Dummy XML for API method get_a_row: UYiIHShKmpQHBADYFLNwyGqVNCuVJAnswiXuKZKpCjJWzNeXcKiFCyyiaceRTVCiYnBLa','Dummy clob for API method get_a_row: NHvWTxTUsqMcbMzlaXLCLduNYaXLhZbrfXgBCVSrYnEFdSGcF',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: pNoVbmiShAXuMXNtdehScyKQHowBqeKNYWvCdNqOCaQfOlgijKljbQzxBlXRQtgFXSxqlDHfEyxrkr'),'2095-10-03 00:00:00','2020-11-16 18:03:15.042371','2020-11-16 18:03:15.042374 +00:00','2020-11-16 19:03:15.042376',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16034,'zhlRuKKaHSUuH','U',487672629134,861053649039,2713633.26246,410087100311858.77091,15775834135004939678435.00266101239,804765044900000000000000,'Dummy XML for API method get_a_row: OoJibLHypBSIjKDrfekSksacFxMSsagNfIQNdCJzbabEFKNAEdgFtQQTlVBUmnMUJjVNNMrHFMWpDocJasYmq','Dummy clob for API method get_a_row: hQdRhPqVUkJxRSXEHJpCvxEsdLOaGcktlnADcDiLsPJnHasjTQvTjvpKcsrnsaPGYKAtWFQzYyqDXxcwcJtqXaEOfsqUexR',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ZJhefJjsPlWHsSHEBldQATUEDrOACiPyIXhDGLorvQxQsLTheUlf'),'1962-12-20 00:00:00','2020-11-16 18:03:15.042746','2020-11-16 18:03:15.042749 +00:00','2020-11-16 19:03:15.042751',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16035,'UdAvfhrzqXJ','K',998914649349,580849441344,9269930.4241,926652671652183.66583,951945563579864560187798.787428764049,36393984200000000000000,'Dummy XML for API method get_a_row: htfnlhLzgSTkbITMlyLfOFUIQWHPfgwSYvZGKMvLALjSfcQwypbKCWjyPmCQNHRENtr','Dummy clob for API method get_a_row: UOXlJuxuhlEPLjZhCgQoibXYUNPOEaEArohIkZFkHoNbWcyQnitwUOLobnzOVCvZZmXvIeSKUdPEEVpHvI',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: ZpQpTbhWFbAJgbkXfHQaIMIBYkAwXwKnKSlsAUtBkfbq'),'2085-06-12 00:00:00','2020-11-16 18:03:15.043150','2020-11-16 18:03:15.043153 +00:00','2020-11-16 19:03:15.043155',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16036,'nkLmQ','H',340947804963,229307971110,9617075.40419,488252018571035.88618,332015987517737099829347.026993734327,742849304400000000000000,'Dummy XML for API method get_a_row: XsJQulBhveZPmsREawlkWRNfNWlkjXiXMCSeQdYssMzyeiViOxivizVlOuAeJkEIgruDVpwSIliBziNbTTgSXEI','Dummy clob for API method get_a_row: xTIZOcAZDtBAXSBXiQwiiiMiOhwgpNkeKDckSxsMejBXAOzCkdAFnVJMAFGDqkEOwek',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: PtjNAyFixLkyKxmcjtrLIjoJiwbbOmNQHiPkbGokhuLKDsgZevZFNZzxpLoOkTyEuAjlDaNQoCVLbViNrAhbLNO'),'2089-05-22 00:00:00','2020-11-16 18:03:15.043706','2020-11-16 18:03:15.043710 +00:00','2020-11-16 19:03:15.043712',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16037,'EzLZnpcuuwGTu','T',948889646852,908614902534,3362483.42346,796370403599580.19215,888294228055131178430363.894112309154,658061661900000000000000,'Dummy XML for API method get_a_row: hMVpvgMBpEixcOCtjwSSvPZgowyQFvZeGapHFAqRydtjh','Dummy clob for API method get_a_row: kCuNkkJHrWIUGBbmgweXFhOtLiaMCdLJiiJiBOCQAPuvIgmXNdAzRwpvkUZmOURaFSDIPeCgLYTNOBQZLaLTZBETDiVPjUq',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: hxEYKoDZBUNfxGUwvkFnWWtIAYYzysmsWYmZp'),'1978-06-15 00:00:00','2020-11-16 18:03:15.044047','2020-11-16 18:03:15.044049 +00:00','2020-11-16 19:03:15.044051',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16038,'NvYyXHZPyTaDGqk','i',425551532729,562994776083,4665813.15587,184314026430720.84104,650414670604548599180023.301666038193,809571559800000000000000,'Dummy XML for API method get_a_row: YszEnaTJqIDKdvJGUycFpdzbsBKiXKQloXCKhsYoceOjmuTCVFdyLpt','Dummy clob for API method get_a_row: uKnLkkuegGVLoiuwdqpbXTdNHohjAKCiiqVScTTJljuacOzyvTZiJ',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: eBzUuluwNPxreRBOGOakCzidMCHHRJhgkhLPEXPgYiaZsddFNWDbisAqEHcLv'),'2007-01-19 00:00:00','2020-11-16 18:03:15.044568','2020-11-16 18:03:15.044571 +00:00','2020-11-16 19:03:15.044573',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16039,'xwIGioQue','B',179420987213,897952326877,5709283.94813,223915235619569.64933,670452245779999231835419.939771069059,488405893300000000000000,'Dummy XML for API method get_a_row: LjACiXoonbzzsdVqhHhuXjKXMWMDjQdSLMxKAllvihoJYzoiQcYjSjwYFMGRnRHy','Dummy clob for API method get_a_row: xJtPGmQpVEvjyGdyknCzZqRZDbnDsuWexCnGazFxceCiCBExtUnrxPNAlgTygnUSHjqZFjwNSFibsWXwwavq',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: kfijHFHmaQjOsHHlBLLZVTqlkxhHOpqXzAqqvgrJMxg'),'2091-02-03 00:00:00','2020-11-16 18:03:15.044974','2020-11-16 18:03:15.044977 +00:00','2020-11-16 19:03:15.044979',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16040,'jeXiIVwOgvUd','r',412586248785,893433619094,9595972.10318,189147648254000.01961,495492562691552574051057.29845625662,334236303200000000000000,'Dummy XML for API method get_a_row: FnozuOIrWMCUJTFCEcWmsdQhMpeBjeXmlfiYlrAsJRBFnjRvyQkCChIRdTAesgeIrl','Dummy clob for API method get_a_row: vKFuNuXrgMidKGPDmMgEPyjDeYeAADvAypMJsociOQlcjiEQENiXpVwZikvOxSseBvmCurmBcRgygoTjlMYqYsahZIX',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: HUNQLYfeZqRhePWVJQIUxUEVKSMaEKsCMzRnqLdFelQQcvMiIiBWccLSnZqPjXhlqiUUbAboBYkZPQDTBNxhnD'),'1979-07-31 00:00:00','2020-11-16 18:03:15.045460','2020-11-16 18:03:15.045464 +00:00','2020-11-16 19:03:15.045466',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16041,'Z','D',490612337404,680923245992,2069421.52017,841988989293689.61024,406630251638145249951675.088653675049,379367193700000000000000,'Dummy XML for API method get_a_row: lDvnWKHmwssPlpnnwWbBlPqYuKLTJVJVdKEadJAtZgTGpMvAwKMdkJJfOGHffRIZDxpPynhVCuIbclYq','Dummy clob for API method get_a_row: XxufTBrRLFJaIScdIWnAcVyEUEMvhVjeEZLkJQUIvZYwAyfCeOcOupasCHb',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: XavPfULRjwlDvMwdUeHzTpKbLJWGgml'),'2025-01-15 00:00:00','2020-11-16 18:03:15.045895','2020-11-16 18:03:15.045898 +00:00','2020-11-16 19:03:15.045899',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16042,'PYatkNjvRGaaY','O',382556248613,652090863770,8437644.04251,410634657289216.31167,933296702206352659578278.399567040972,722311831800000000000000,'Dummy XML for API method get_a_row: ikRWMGxyaMJepwKMPwOZtOCqfrObdXOObhumAhLKHblPXiEeQwRPKnTNbgypeLNCtERpd','Dummy clob for API method get_a_row: XXXApQxGUvnfroLhcDNsbfsZNBfCFAFcBnwGgIunIPMpdqspFHwtVWvlYDCu',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: CjWjkmXwFVlSZhFVlOSIcvaXANarzBxKdJrzyMZwNaYheyqHJEhfyV'),'2057-08-09 00:00:00','2020-11-16 18:03:15.046316','2020-11-16 18:03:15.046319 +00:00','2020-11-16 19:03:15.046321',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16043,'ww','j',768553620970,402576558269,1354326.89978,680154369395995.07127,597418203418945918777346.596927388402,555542655800000000000000,'Dummy XML for API method get_a_row: YteRyprpGtReJRHXxWmNaGSjmhgfsDqFXdIGyvXmsmTMOExgKHUJlvC','Dummy clob for API method get_a_row: aLxrsiveXakINfJpJGZpKPQxoApeytQyoFxrdSQPMEUbj',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: WTOtyvLSIPMmVrbLcLfizqyaEWLuQuXmRDuoZJLY'),'1952-09-15 00:00:00','2020-11-16 18:03:15.046629','2020-11-16 18:03:15.046632 +00:00','2020-11-16 19:03:15.046634',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16044,'r','i',84698717935,582042866315,8701707.65455,519657718866542.9789,856330640619500711394161.270869501778,756377978800000000000000,'Dummy XML for API method get_a_row: SihbqZnPpiFZSHavAmjqNXChucTfOyOjcFOHciDPrRxgISOirNjoPpCNK','Dummy clob for API method get_a_row: GFXCzSnTgupeLsEgWVpRQmqDTenQwnGV',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: zlChfleaywZbvuFJFGTzBEajLTvFtptubhsXpLxUlqshlJd'),'2038-11-22 00:00:00','2020-11-16 18:03:15.046994','2020-11-16 18:03:15.046997 +00:00','2020-11-16 19:03:15.046999',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16045,'jwoKwwLEynYaXV','d',362541012662,978635557901,7113017.29283,112004147470800.26463,61231579055263933665361.665659621159,585168253900000000000000,'Dummy XML for API method get_a_row: xLgmNEUGDruElqGffgwPiSuOJrSrMIarvdbYAQRHqhdLNcFJzvAoWYFHCzdZNvxyVVdlGXnWNZbwvzXImTfihgzx','Dummy clob for API method get_a_row: FyNLPGLCGxUztfMUckRYdQoSJIubxvxabzSntiQgYRutDVHvQzFKPmvOGInMCJdixnnn',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: dBBBMRhlvOZHzmMitpiHGAwruOWEigRzIxSLXrBhKoOIZZkCS'),'1963-07-23 00:00:00','2020-11-16 18:03:15.047416','2020-11-16 18:03:15.047419 +00:00','2020-11-16 19:03:15.047421',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16046,'un','F',455912419292,305103094284,4482590.31493,124860580476330.77536,895953777201447343347317.632203465286,970952654900000000000000,'Dummy XML for API method get_a_row: lDMsTXdNPDdwPgZguNfbyWQXWYUYGWqmlWghfDnAGwNUaNQAkvyFQOWHcgQZtUABaKevjMgAJswZjgXHTSdXkNuNDxHZXnBgGrQ','Dummy clob for API method get_a_row: awAunueAuuPvzuwehuOdHlVHAihPjMiJdYBGNIXfHKI',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: sEEEiQKNclRaehKWHNKXSRBMDUKoEXgzpZ'),'1946-01-11 00:00:00','2020-11-16 18:03:15.047746','2020-11-16 18:03:15.047749 +00:00','2020-11-16 19:03:15.047751',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16047,'yrdMyAkHGM','U',409677256075,653642680617,657814.88596,496648011366937.38792,531001558224930662840557.439887529355,201826921800000000000000,'Dummy XML for API method get_a_row: vYOtnorNSLdJdZojFNvfYdehYCNOgiwvOoFVmireJdulfAMZidjy','Dummy clob for API method get_a_row: pxTacITWoJgzifPIfNPqpQEdrHGfwMlXuPpQN',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: IXBLJLZAngapYSzCjgEaGZUFtiYVPwUYfgZYCPRrJRwfywPUEyqvpiuCFZhYHuYTMzNbiRutxAGEVkZygORFeP'),'2002-10-21 00:00:00','2020-11-16 18:03:15.048140','2020-11-16 18:03:15.048143 +00:00','2020-11-16 19:03:15.048145',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16048,'GHxJKqLWRJG','O',184582962401,265421358373,370886.78094,985198875868393.23762,940561663744097235891445.285213834246,7055141929000000000000,'Dummy XML for API method get_a_row: SUAmozemJzDTHKktHFPPKNmjtnzgLRQwjbWvGbvUpPqYU','Dummy clob for API method get_a_row: aVPdQJKmvMHASAQujtaaOOmgNxUGnfFMFIRQpWELJrbpvXVeNQpFmHYnSjkEoQyAVZRIWVFskCPKlILaNKLamezYs',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: VemCLeQtxRsbXxTFPYPkNgtvebuyZNam'),'2048-09-12 00:00:00','2020-11-16 18:03:15.048543','2020-11-16 18:03:15.048546 +00:00','2020-11-16 19:03:15.048548',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16049,'YRW','v',253671875540,542400129054,5888202.11816,678974207705351.52802,671735239456385455870575.738008322726,458263883900000000000000,'Dummy XML for API method get_a_row: PbyBONFlxAFgBkrqfjaQstxOSrCyTlNJXdcJLezXmspZCNqbxDvbcVviTBAizTvUdipMPqOScQ','Dummy clob for API method get_a_row: uHoqQuyavHJsqedrLxurQbfmREFuZTlWjKmyOAadGcoKILgXMlGjDvcMLtkpOkxfRvrEeDVRZiCYmMKdqLdcPOj',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: DWockYJXYfOnPBpmUIHqImqCFNSeygbVSfgPcepxORLCOzPKUlTXAZxJkGGjFksqKvCrgekiZTsWmGMZylBzGYeCmnyhPh'),'2054-12-16 00:00:00','2020-11-16 18:03:15.048922','2020-11-16 18:03:15.048924 +00:00','2020-11-16 19:03:15.048926',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16050,'MOtueAtu','L',882474513117,747248578488,6096178.23853,199771275511231.9077,676676386387893000289606.29074739869,677505759800000000000000,'Dummy XML for API method get_a_row: IiLJXsxiBYvMYHmimQQGFUDxvmmjNlevgsYEhWvQSqqYBgnyKDlQDmpDUxskeceiRUQFeiyEHGeGBqvGpYzQYUzBqR','Dummy clob for API method get_a_row: LyaykKHdfPlCRJQXEdlKJVsBDwejIlGRcIwpRNImQcyYyoWVCFJLMJqOvEhswNvIXisjXYJUGjiIKPWFCnuVvx',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: YMehOaDunLqHVNgqIpsTXYNUxrcOsKagkNayxcEIRaqeXvNOsfOsULAWEHvHlebYYQGTqkyaP'),'2032-08-10 00:00:00','2020-11-16 18:03:15.049444','2020-11-16 18:03:15.049448 +00:00','2020-11-16 19:03:15.049450',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16051,'vUaipXqGNVbCoU','F',680792264223,136125494731,6046555.16662,628010972054388.20352,808487456441476375130256.962986470726,826434770700000000000000,'Dummy XML for API method get_a_row: xNfLpHOLnpmjMcxCUHFeMsmLCxPfQGfvJAmYxmCuCHKPQRYZqMJtidIALvrFOtGwpYHJOAwWPPtdKLltJZYzknvUvdeMfJq','Dummy clob for API method get_a_row: gRYfRVwFcDWsotuUVPFzgCQlClWtJnOvhSIcghzmcvsZgqoQtjLMLHcjCvZbIKBJVfVVatHxLxYNsFBwUhGVurfjN',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: DosAvyaNuHjwOEgjZEMefXcfwCBgtiMYJTuDvlKTVcBQBBRgZHVKHqNzqugpgnlEbdzKqrDuhOv'),'2028-06-19 00:00:00','2020-11-16 18:03:15.049944','2020-11-16 18:03:15.049947 +00:00','2020-11-16 19:03:15.049949',NULL,NULL,NULL)
+into PLEX_TEST_MULTIPLE_DATATYPES(PTMD_ID,PTMD_VARCHAR,PTMD_CHAR,PTMD_INTEGER,PTMD_NUMBER,PTMD_NUMBER_X_5,PTMD_NUMBER_20_5,PTMD_FLOAT,PTMD_FLOAT_SIZE_30,PTMD_XMLTYPE,PTMD_CLOB,PTMD_BLOB,PTMD_DATE,PTMD_TIMESTAMP,PTMD_TIMESTAMP_TZ,PTMD_TIMESTAMP_LTZ,PTMD_INTERVAL_DAY_TO_SECOND,PTMD_INTERVAL_YEAR_TO_MONTH,PTMD_LONG) values (16052,'uLWJXrBZ','X',7117919239,263529690081,5228275.00628,858611220369156.51589,555458624710571269494793.135195579088,477647932100000000000000,'Dummy XML for API method get_a_row: XwGAbrtUbHVRsgkYVASYqGNJEoFrnPnarnPWZSOmdfojhJztAfzjimGckLsOHhvSulnRzzLyfGIYPMDFUEbWBuCczHlgzJE','Dummy clob for API method get_a_row: QcBgIKsgmHIyyJhFQTlIbxuusYxyIQXwjJFXXvmHMjUADjhPbWoaHzSJAzfRbPc',utl_raw.cast_to_raw('Dummy blob for API method get_a_row: RNWWFTMcDFJehcJUumZQPpFkIlpyLOddxqWJDurebyFpbbdvmEhrEiGZyLUQ'),'2031-08-02 00:00:00','2020-11-16 18:03:15.050357','2020-11-16 18:03:15.050360 +00:00','2020-11-16 19:03:15.050362',NULL,NULL,NULL)
select * from dual;
commit;
alter session set cursor_sharing = exact;