-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Procedure: DROP_TABLE
--
-- Description: Drops a table.
--
-- Called by: PUBLIC
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
PROCEDURE DROP_TABLE(i_table_name IN VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE 'drop table ' || i_table_name;
EXCEPTION
WHEN OTHERS THEN
NULL; -- I know - I'm a hypocrite here.
END DROP_TABLE;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Procedure: COPY_TABLE
--
-- Description: This will copy the structure of a table and optionally the data.
--
-- Called by: PUBLIC
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
PROCEDURE COPY_TABLE(i_table_name IN VARCHAR2
,i_copied_table_name IN VARCHAR2 DEFAULT NULL
,i_where_clause IN VARCHAR2 DEFAULT 'WHERE 1 = 2') IS
-- PRAGMA AUTONOMOUS_TRANSACTION;
l_copied_table_name all_tables.table_name%TYPE;
BEGIN
IF i_copied_table_name IS NOT NULL
THEN
l_copied_table_name := upper(i_copied_table_name);
ELSE
l_copied_table_name := substr(upper(i_table_name), 1, 26) || '_TST';
END IF;
zfnd_test_util.drop_table(i_table_name => l_copied_table_name);
EXECUTE IMMEDIATE 'CREATE TABLE ' || l_copied_table_name || ' AS
(SELECT *
FROM ' || i_table_name || '
' || i_where_clause || ')';
-- COMMIT;
EXCEPTION
WHEN OTHERS THEN
zfnd_debug.log('EXITING CREATE_TEST_TABLE AS EXCEPTION', 'N', 'ZFND_TEST_UTIL.CREATE_TEST_TABLE');
dbms_output.put_line('+---------------------------------------------------------------------------+');
dbms_output.put_line('ERROR IN ZFND_TEST_UTIL.CREATE_TEST_TABLE');
dbms_output.put_line('ERROR: ' || SQLCODE || ' ' || SQLERRM);
dbms_output.put_line('i_test_table: ' || i_copied_table_name);
dbms_output.put_line('i_template_table: ' || i_table_name);
dbms_output.put_line('+---------------------------------------------------------------------------+');
RAISE_APPLICATION_ERROR(-20010, 'Error in ZFND_TEST_UTIL.CREATE_TEST_TABLE');
END COPY_TABLE;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Function: COMPARE_TABLES
--
-- Description: Compares 2 tables with the same column names. It will omit
-- comparing the "who" columns since they will usually be different.
--
-- It returns the number of differences. It returns 0 if they
-- are the same.
--
-- Called by: PUBLIC
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
FUNCTION COMPARE_TABLES(i_test_table IN VARCHAR2
,i_test_table_where_clause IN VARCHAR2 DEFAULT 'WHERE 1 = 1'
,i_compare_table IN VARCHAR2
,i_compare_table_where_clause IN VARCHAR2 DEFAULT 'WHERE 1 = 1'
,i_col_1_to_omit IN VARCHAR2 DEFAULT NULL
,i_col_2_to_omit IN VARCHAR2 DEFAULT NULL
,i_col_3_to_omit IN VARCHAR2 DEFAULT NULL
,i_col_4_to_omit IN VARCHAR2 DEFAULT NULL
,i_col_5_to_omit IN VARCHAR2 DEFAULT NULL) RETURN INTEGER
IS
CURSOR c_columns(c_test_table all_tab_columns.table_name%TYPE) IS
SELECT atc.column_name
FROM all_tab_columns atc
WHERE atc.table_name = upper(c_test_table)
ORDER BY atc.column_id;
l_differences INTEGER;
l_differences2 INTEGER;
l_column_list VARCHAR2(32000);
l_query_text VARCHAR2(32000);
l_diff_data SYS_REFCURSOR;
l_first_column BOOLEAN := TRUE;
BEGIN
FOR c_columns_rec IN c_columns(i_test_table)
LOOP
IF upper(c_columns_rec.column_name) NOT IN
('LAST_UPDATE_DATE'
,'LAST_UPDATED_BY'
,'LAST_UPDATE_LOGIN'
,'CREATED_BY'
,'CREATION_DATE'
,nvl(i_col_1_to_omit, 'CREATION_DATE')
,nvl(i_col_2_to_omit, 'CREATION_DATE')
,nvl(i_col_3_to_omit, 'CREATION_DATE')
,nvl(i_col_4_to_omit, 'CREATION_DATE')
,nvl(i_col_5_to_omit, 'CREATION_DATE'))
THEN
IF l_first_column
THEN
l_first_column := FALSE;
l_column_list := 'SELECT ' || c_columns_rec.column_name || fnd_global.newline;
ELSE
l_column_list := l_column_list || ' ,' || c_columns_rec.column_name || fnd_global.newline;
END IF;
END IF;
END LOOP c_columns;
l_query_text := l_column_list || ' FROM ' || i_test_table || ' ' || fnd_global.newline || i_test_table_where_clause ||
fnd_global.newline || ' MINUS ' || fnd_global.newline || l_column_list || ' FROM ' || i_compare_table || ' ' ||
fnd_global.Newline || i_compare_table_where_clause;
OPEN l_diff_data FOR 'SELECT COUNT(*) FROM (' || l_query_text || ')';
FETCH l_diff_data
INTO l_differences;
CLOSE l_diff_data;
IF l_differences > 0
THEN
dbms_output.put_line('-- Differences: ' || l_differences);
dbms_output.put_line(l_query_text);
END IF;
l_query_text := l_column_list || ' FROM ' || i_compare_table || ' ' || fnd_global.newline || i_compare_table_where_clause ||
fnd_global.newline || ' MINUS ' || fnd_global.newline || l_column_list || ' FROM ' || i_test_table || ' ' ||
fnd_global.Newline || i_test_table_where_clause;
OPEN l_diff_data FOR 'SELECT COUNT(*) FROM (' || l_query_text || ')';
FETCH l_diff_data
INTO l_differences2;
CLOSE l_diff_data;
IF l_differences2 > 0
THEN
dbms_output.put_line('-- Differences: ' || l_differences2);
dbms_output.put_line(l_query_text);
END IF;
l_differences := nvl(l_differences, 0) + nvl(l_differences2, 0);
RETURN l_differences;
EXCEPTION
WHEN OTHERS THEN
zfnd_debug.log('EXITING COMPARE_TABLES AS EXCEPTION', 'N', 'ZFND_TEST_UTIL.COMPARE_TABLES');
dbms_output.put_line('+---------------------------------------------------------------------------+');
dbms_output.put_line('ERROR IN ZFND_TEST_UTIL.COMPARE_TABLES');
dbms_output.put_line('ERROR: ' || SQLCODE || ' ' || SQLERRM);
dbms_output.put_line('i_test_table: ' || i_test_table);
dbms_output.put_line('i_test_table_where_clause: ' || i_test_table_where_clause);
dbms_output.put_line('i_compare_table: ' || i_compare_table);
dbms_output.put_line('i_compare_table_where_clause: ' || i_compare_table_where_clause);
dbms_output.put_line('+---------------------------------------------------------------------------+');
RAISE_APPLICATION_ERROR(-20010, 'Error in ZFND_TEST_UTIL.COMPARE_TABLES');
END COMPARE_TABLES;